Catcher是MCA国的情报员,他工作时发现敌国会用一些对称的密码进行通信,比如像这些ABBA,ABA,A,123321,但是他们有时会在开始或结束时加入一些无关的字符以防止别国破解。比如进行下列变化 ABBA->12ABBA,ABA->ABAKK,123321->51233214 。因为截获的串太长了,而且存在多种可能的情况(abaaab可看作是aba,或baaab的加密形式),Cathcer的工作量实在是太大了,他只能向电脑高手求助,你能帮Catcher找出最长的有效密码串吗?
输入:
输入一个字符串
输出:
返回有效密码串的最大长度
测试样例:
输入:ABBAKK
输出:4
我的源码:
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
int getCommonStrLength(char *pFirstStr, char *pSecondStr);
char *str1, *str2;
str1 = new char[128];
str2 = new char[128];
cin.get(str1, 128, '\n');
int len = strlen(str1), j = 0;
for (int i = len - 1; i >= 0; i--)
{
str2[j++] = str1[i];
}
if (strlen(str1) == 0 || strlen(str2) == 0)
{
cout << 0 << endl;
return -1;
}
cout << getCommonStrLength(str1, str2) << endl;
delete[] str1;
delete[] str2;
return 0;
}
int getCommonStrLength(char *pFirstStr, char *pSecondStr)
{
int len1, len2 = 0, result = 0, con = 0;
char *p1 = pFirstStr, *p2 = pSecondStr;
len1 = strlen(pFirstStr);
len2 = strlen(pSecondStr);
if (len1<1 || len2<1)
return -1;
for (int i = 0; i<len1; i++)
{
int pos = i;
for (int j = 0; j<len2; j++)
{
if (p1[pos] == p2[j])
{
con++;
if (result<con)
result = con;
pos++;
}
else
{
con = 0;
}
}
}
return result;
}