一个算法题(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
posted @ 2010-05-12 14:32  基础软件  阅读(383)  评论(0编辑  收藏  举报