题解 | #密码截取#

密码截取

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;
}

全部评论

相关推荐

10-30 10:16
南京大学 Java
永远的鹅孝子:给南大✌️跪了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务