TopcoderArchive
Archive
Algorithm problem

MaximumPalindromeScore

Problem statement, definition, constraints, and public examples.

Problem Statement

“回文分数”游戏并不简单。游戏的目标是修改最多maxChanges个字符使得一个字符串wordçš„å›žæ–‡åˆ†æ•°æœ€é«˜ã€‚åªå è®¸ä¿®æ”¹ï¼Œä¸è®¸å¢žåŠ æˆ–è€ åˆ é™¤å­—ç¬¦ã€‚ä¸€ä¸ªå­—ç¬¦ä¸²çš„å›žæ–‡åˆ†æ•°å®šä¹‰å¦‚ä¸‹ï¼š
  • 如果字符串不是回文串,则分数为0。
  • 如果字符串是回文串,且长度为奇数,则分数为1。
  • 如果字符串是回文串,且长度为偶数,我们将它分为左右两半。计算它的一半子串的回文分数为K(两个一半子串得分一定相同),则原字符串的回文分数为K + 1。

给定一个字符串word和一个型整数maxChanges,返回最多修改maxChanges个字符后最大可能的回文分数。

Definition

Class:
MaximumPalindromeScore
Method:
maximize
Parameters:
String, int
Returns:
int
Method signature:
int maximize(String word, int maxChanges)
(be sure your method is public)

Notes

  • å›žæ–‡ä¸²çš„å®šä¹‰æ˜¯ä¸€ä¸ªå­—ç¬¦ä¸²ä»Žå‰å‘åŽè¯»å’Œä»ŽåŽå‘å‰è¯»å®Œå ¨ä¸€æ ·ã€‚

Constraints

  • wordåŒ å«1到50个字符(含1和50)。
  • word åªåŒ å«å°å†™å­—æ¯ ('a'-'z')。
  • maxChanges 取值范围是0到50(含0和50)。

Examples

  1. "coder"
    2
    Returns: 1
    我们可以把c改成r,把e改成o,得到"rodor"。这是一个奇数长度的回文串,所以得分为1。
  2. "abcbxabcba"
    1
    Returns: 2
    如果把x改成a,得到偶数长度的回文串"abcbaabcba"。它的一半子串是奇数长度的回文串"abcba",所以子串分数为K = 1,因而最后得分是K + 1 = 2。
  3. "abcdefghijklmnop"
    15
    Returns: 5
    可以把这个字符串修改成"aaaaaaaaaaaaaaaa"、"eeeeeeeeeeeeeeee"æˆ–å ¶ä»–14种串,回文得分均为5。
  4. "ssssssssssssssss"
    15
    Returns: 5
    æœ‰æ—¶ä¸åšæ‰€æœ‰å è®¸çš„æ”¹å˜å¯èƒ½æ›´å¥½ã€‚
  5. "vyyvvzzvvxxvvxxv"
    4
    Returns: 3
  6. "a"
    0
    Returns: 1
Back to all problems