题解 | #编号子回文I#

编号子回文I

https://www.nowcoder.com/practice/db5995cd4783483f8b9f7a9e3b3a479f

考察的知识点:动态规划;

解答方法分析:

  1. 检查输入的字符串是否为空。如果为空,返回空字符串作为结果。
  2. 初始化变量 n 为字符串的长度,max 为当前找到的最长回文子串的长度,`start 为最长回文串的起始索引。
  3. 遍历字符串的每个字符,使用两指针 l 和 r 分别指向当前字符的前一个和后一个。
  4. 通过调用 maxLen 函数获取以当前字符为中的奇数长度和偶数长度的回文子串长度。将它们分别赋给变量 len。
  5. 如果 len 大于 max,更新 max 为 len,同时更新 start 为当前回文子串的起始索引。
  6. 遍结束后,最长回文子串的起始索引和长度已经确定,通过调用 substr 函数获取最终的结果字符串。
  7. 返回最长回文子串作为结果。

所用编程语言:C++;

完整编程代码:↓

class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param s string字符串
     * @return string字符串
     */
    string longestPalindrome(string s) {
        if (s.empty()) {
            return "";
        }
        int n = s.length();
        int max = 0, start = 0;
        for (int i = 0; i < n; i++) {
            int len = std::max(maxLen(s, i, i), maxLen(s, i, i + 1));
            if (len > max) {
                max = len;
                start = i - (len - 1) / 2;
            }
        }
        return s.substr(start, max);
    }
    int maxLen(const string& s, int l, int r) {
        while (l >= 0 && r < s.length() && s[l] == s[r]) {
            l--;
            r++;
        }
        return r - l - 1;
    }
};

全部评论

相关推荐

09-01 10:50
已编辑
东华大学 C++
PDD校招_内推:拼多多意向和开奖一般都比较晚,可能10月11月才出意向
点赞 评论 收藏
分享
皮格吉:不,有的厂子面试无手撕,可以试试。都是一边学一边面。哪有真正准备好的时候,别放弃
无实习如何秋招上岸
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务