LeetCode 每日一题 5. 最长回文子串

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

示例 1:

输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。

示例 2:

输入: "cbbd"
输出: "bb"

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-palindromic-substring
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


#pragma GCC optimize("O2")
#pragma G++ optimize("O2")

class Solution {
 public:
  string longestPalindrome(string s) {
    const int n = s.length();
    string ans;
    for(int i = 0, len, m = 0; i < n; ++i) {
      for(len = n - i; len > 0 && len > m; --len) {
        if(isPalindrome(s, i, i + len - 1)) {
          if(len > ans.length()) {
            ans = s.substr(i, len);
            m = ans.length();
          }
          break;
        }
      }
    }
    return ans;
  }

  bool isPalindrome(const string &s, int p, int q) {
    while(p < q && s[p] == s[q])
      p++, q--;
    return p >= q;
  }
};

猜你喜欢

转载自www.cnblogs.com/Forgenvueory/p/12928750.html