描述
Catcher是MCA国的情报员,他工作时发现敌国会用一些对称的密码进行通信,比如像这些ABBA,ABA,A,123321,但是他们有时会在开始或结束时加入一些无关的字符以防止别国破解。比如进行下列变化 ABBA->12ABBA,ABA->ABAKK,123321->51233214 。因为截获的串太长了,而且存在多种可能的情况(abaaab可看作是aba,或baaab的加密形式),Cathcer的工作量实在是太大了,他只能向电脑高手求助,你能帮Catcher找出最长的有效密码串吗?
数据范围:字符串长度满足 1 \le n \le 2500 \1≤n≤2500
输入描述:
输入一个字符串(字符串的长度不超过2500)
输出描述:
返回有效密码串的最大长度
示例1
输入:
ABBA
复制输出:
4
复制
示例2
输入:
ABBBA
复制输出:
5
复制
示例3
输入:
12HHHHA
复制输出:
4
#include <iostream>
/**
* @brief
* 检查str是否是回文串,如果是返回true,不是返回false
* @param str
* @return true
* @return false
*/
bool checkstr(std::string str)
{
int i = 0;
int j = str.length()-1;
while(i <= j)
{
if(str[i] == str[j])
{
i++;
j--;
}
else
{
return false;
}
}
return true;
}
int passwordSubstrmaxLen(std::string str)
{
int max = 0;
if(str == "")
{
return 0;
}
int len = str.length();
for(int i = 0; i < len; ++i)
{
for(int j = len-1; j > i; --j)
{
std::string temp = str.substr(i, j - i + 1);
bool flag = checkstr(temp);
if(flag)
{
if(temp.length() > max)
{
max = temp.length();
}
}
}
}
return max;;
}
//求最长回文串
int main()
{
std::string str;
getline(std::cin, str);
std::cout << passwordSubstrmaxLen(str) << std::endl;
return 0;
}