题解 | #密码截取#
密码截取
https://www.nowcoder.com/practice/3cd4621963e8454594f00199f4536bb1
#include<iostream>
#include<string>
#include<cmath>
using namespace std;
int main()
{
string str;
cin >> str;
int m=1; //有效密码串的最大长度
for (int i = 1; i < str.size()-1; i++) //先遍历整个字符串,判断其中是否存在长度为奇数的有效密码串
{
int n = 1; //长度为奇数的有效密码串是以最中间的一个字符为中心对称的,最小长度为1
for (int j = 1; j <= ((i >= (str.size() - 1 - i)) ? (str.size() - 1 - i) : i); j++)
{
if (str[i+j] == str[i-j]) //从当前位置开始,依次判断左右两边的字符是否相同
{
n = n + 2;
}
else //若找到不同的,则不再继续判断
{
break;
}
}
if (n > m) //若找到一个更长的有效字符串,将其长度记入m
{
m = n;
}
}
for (int i = 0; i < str.size() - 1; i++) //同上理,判断是否存在长度为偶数的有效字符串
{
int n = 0;
if (str[i] == str[i + 1])
{
n = n + 2;
int j = i + 1;
for (int m = 1; m <= (i >= (str.size() - 1 - j) ? (str.size() - 1 - j) : i); m++)
{
if (str[i - m] == str[j + m])
{
n = n + 2;
}
else
{
break;
}
}
}
if (m < n)
{
m = n;
}
}
cout << m << endl;
return 0;
}