您的位置:首页 > 其它

【中级】字符串运用-密码截取

2016-08-20 17:44 176 查看
题目表述

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


输入描述:

输入一个字符串


输出描述:

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


输入例子:

ABBA



输出例子:

4

牛客上未通过  不过华为OJ 通过了   先记录下然后改善

#include<iostream>
#include<string>
using namespace std;
bool check(string s)
{//判断字符串是否为对称密码
if (s.size() % 2 == 0)
{
int a = 0,b=s.size()-1;
while (a < b)
{
if (s[a] != s[b])
return false;
else { a++; b--; }
}
return true;
}
else
{
int a = 0, b = s.size() - 1;
while (a!=b)
{
if (s[a] != s[b])
return false;
else { a++; b--;}
}
return true;
}
}
int main()
{
string s;
while (getline(cin,s))
{
int max = 1;
if (s.size() == 1)
cout << '1'<< endl;
else
{
for (int i = 1; i < s.size(); i++)
{      //判断以每个字符结尾的字符串的所有情况
for (int j = 0; j < i; j++)
{
string tem = s.substr(j,i-j+1);
if (check(tem))
{
max = (max>tem.size() ? max : tem.size());
}
}
}
cout << max << endl;
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: