题解 | #密码截取#
密码截取
https://www.nowcoder.com/practice/3cd4621963e8454594f00199f4536bb1
#include <iostream> #include <string> #include <algorithm> // 引入算法库,用于使用std::max using namespace std; int getLen(const string& s, int l, int r) { //函数接收一个字符串 s 和两个整数 left 和 right 作为参数。 while (l >= 0 && r < s.size() && s[l] == s[r]) { l--; r++; } return r - l - 1; } //getLen 函数用于找出以 l 和 r 为边界的最长回文子串的长度 //l 和 r 是指针,分别从中心向两边扩展。 //当 l 大于等于0且 r 小于字符串的长度,并且 s[l] 等于 s[r] 时,循环继续。 //每次循环,l 向左移动一个位置,r 向右移动一个位置,直到它们指向的字符不再相等,或者它们超出了字符串的边界。 //函数返回回文子串的长度,计算方法是 r - l - 1。 int main() { string str; while (cin >> str) { if (str.empty()) { cout << "0" << endl; continue; } int maxLen = 0; for (int i = 0; i < str.size(); i++) { // 检查以i为中心的回文串 int len1 = getLen(str, i, i); // 检查以i和i+1之间的空隙为中心的回文串 int len2 = getLen(str, i, i + 1); // 更新最大长度 maxLen = max(maxLen, max(len1, len2)); } cout << maxLen << endl; } return 0; }