您的位置:首页 > 编程语言 > C语言/C++

C++ LeetCode 5 最长回文子串

2019-08-01 10:05 363 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/pxh_ww/article/details/98033211

5 最长回文子串

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

示例 1:

输入: “babad”
输出: “bab”
注意: “aba” 也是一个有效答案。
示例 2:

输入: “cbbd”
输出: “bb”

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-palindromic-substring

class Solution {
public:
string longestPalindrome(string s) {
if (s.size() < 2) return s;
int len = s.size(), maxLen = 0, start = 0;
for (int i = 0; i < len - 1; i++) {
//回文子串分奇数个数和偶数个数,两种情况都要判断。
isPalindrome(s, i, i, start, maxLen);
isPalindrome(s, i, i + 1, start, maxLen);
}
return s.substr(start, maxLen);
}

void isPalindrome(string s, int left, int right, int& start, int& maxLen) {
while (left >= 0 && right < s.size() && s[left] == s[right]) {
left--;
right++;
}
if (maxLen < right - left - 1) {
start = left + 1;
maxLen = right - left - 1;
}
}
};

本题参考:
https://www.geek-share.com/detail/2641237342.html

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: