题解 | #密码截取#
密码截取
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; }