题解 | #密码截取#
密码截取
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;
}
360集团公司福利 411人发布
查看16道真题和解析