您的位置:首页 > 其它

最长的回文子串

2017-09-05 13:26 176 查看
Catcher 是MCA国的情报员,他工作时发现敌国会用一些对称的密码进行通信,比如像这些ABBA,ABA,A,123321,但是他们有时会在开始或结束时加入一些无关的字符以防止别国破解。比如进行下列变化 ABBA->12ABBA,ABA->ABAKK,123321->51233214 。因为截获的串太长了,而且存在多种可能的情况(abaaab可看作是aba,或baaab的加密形式),Cathcer的工作量实在是太大了,他只能向电脑高手求助,你能帮Catcher找出最长的有效密码串吗?

输入描述:

输入一个字符串


输出

返回有效密码串的最大长度


输入

ABBA


输出

4


思路:遍历一遍,对每个字符进行ABA/ABBA型判断,保存最长的长度。

#include <iostream>
#include <string>

using namespace std;

int test(){
string s;
int i, j;
while (cin >> s){
int R = 1;
for (i = 1; i < s.length() - 2; i++){

// ABA型长度
for (j = 1; i - j >= 0 && i + j<s.size() && s[i - j] == s[i + j]; j++);
// 求s[i-j..i+1]长度,本来应该是(i+j)-(i-j)+1,但for后j再做了一次++操作因此需要再-2
if (j * 2 - 1>R)
R = j * 2 - 1;

for (j = 0; i - 1 - j >= 0 && i + j<s.size() && s[i - 1 - j] == s[i + j]; j++);
// ABBA型长度
if (j * 2>R)
R = j * 2;
}
cout << R << endl;

}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: