题目描述:字符串运用-密码截获
Catcher是MCA国的情报员,他工作时发现敌国会用一些对称的密码进行通信,比如像这些ABBA,ABA,A,123321,但是他们有事会在开始或结束时加入一些无法的字符以防止别国破解。比如进行如下列变化,ABBA->12ABBA,ABA->ABAKK,123321->51233214。因为截获的串太长了,而且存在多种可能的情况(abaaab可看走是aba,或者baaab的加密形式),Cather的工作量实在是太大了,他只能像电脑高手求助,你能帮Cather找出最长的有效密码串吗?
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int MaxSubstr(const string &a,const string &b,string &c)
{
int start1,start2;
int count=0,Max=0;
for(int i=0;i<a.size();i++)
for(int j=0;j<b.size();j++)
{
start1=i,start2=j;
while(a[start1]==b[start2] && start1<a.size() && start2<b.size())
{
count++;
start1++;
start2++;
}
if(count>Max)
{
Max=count;
c.clear();
c=a.substr(i,Max);
}
count=0;
}
return Max;
}
int main()
{
string s1,s2;
cin>>s1;
s2=s1;
string s3;
reverse(s2.begin(),s2.end());
cout<<s2<<endl;
int maxLength=MaxSubstr(s1,s2,s3);
cout<<s3<<":";
cout<<maxLength<<endl;
return 0;
}