一个算法题(2)(来源于网易编程挑战赛)
题目: UnrepeatingNunbers (难度级别3/总难度为10)
Problem Statement:
“回文分数”游戏并不简单,游戏目标是修改最多maxChanges个字符使得一个字符串的回文分数最高。只允许修改,不许增加或者删除字符。一个字符串的回文分数定义如下:
- 如果字符串不是回文串,则分数为0。
- 如果字符串是回文串,且长度为奇数,则分数为1。
- 如果字符串是回文串,且长度为偶数,设它的一半子串的回文分数为K(两个一半子串得分一定相同),则分数为K + 1。
给定一个字符串word和一个int型数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个字符。
- word 只包含小写字母 ('a'-'z')。
- maxChanges 取值范围是[0,50],闭区间。
我的分析:乍一看,这题好像比第1题难,先把题目记录在博客里,有时间做一下。业余爱好。
Examples
0) | "coder"2 |
returns: 1 | |
把c改成r,把e改成o,得到“rodor”,这是一个奇数长度的回文串,所以得分为1。 |
1) | "abcbxabcba"1 |
returns:2 | |
把x改成a,得到“abcbaabcba”,偶数长度,它的一半子串是“abcba”,该子串是一个奇数长度的回文串,所以子串分数为1,因而最后得分是2。 |
2) | "abcdefghijklmnop"15 |
returns: 5 | |
可以把这个字符串修改成“aaaaaaaaaaaaaaaa”,“eeeeeeeeeeeeeeee”等串,回文得分为5。 |
3) | "ssssssssssssssss"15 |
returns:5 | |
无需做改变。 |
4) | "vyyvvzzvvxxvvxxv"4 |
returns:3 |
5) | "a"0 |
returns:1 |