最长的回文子串

来源:互联网 发布:开发html的软件 编辑:程序博客网 时间:2024/06/05 12:39

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;}
原创粉丝点击