题目描述
Catcher 是MCA国的情报员,他工作时发现敌国会用一些对称的密码进行通信,比如像这些ABBA,ABA,A,123321,但是他们有时会在开始或结束时加入一些无关的字符以防止别国破解。比如进行下列变化 ABBA->12ABBA,ABA->ABAKK,123321->51233214 。因为截获的串太长了,而且存在多种可能的情况(abaaab可看作是aba,或baaab的加密形式),Cathcer的工作量实在是太大了,他只能向电脑高手求助,你能帮Catcher找出最长的有效密码串吗?
(注意:记得加上while处理多个测试用例)
输入描述:
输入一个字符串
输出描述:
返回有效密码串的最大长度
#include<string>
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main(){
string s;
while(cin>>s){
string t(s);
reverse(t.begin(),t.end());
int len = t.size();
vector<int> ans(len+1,0);
vector<vector<int> > dp(len+1,ans);
int maxLen=0;
for(int i=1;i<=len;i++){
for(int j=1;j<=len;j++){
if(s[i-1]==t[j-1]){
dp[i][j]=dp[i-1][j-1]+1;
}
if(dp[i][j]>maxLen)maxLen = dp[i][j];
}
}
cout<<maxLen<<endl;
}
return 0;
}