题目:最长回文子串
给你一个字符串 s,找到 s 中最长的回文子串。
如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。
示例 1:
输入:s = “babad”
输出:“bab”
解释:“aba” 同样是符合题意的答案。
示例 2:
输入:s = “cbbd”
输出:“bb”
提示:
1 <= s.length <= 1000
s 仅由数字和英文字母组成
https://leetcode.cn/problems/longest-palindromic-substring/
思路:双重遍历 + 判断回文串
双重遍历 + 判断回文串
判断回文串可以通过
bool IsPalindRomic(string& str, int left, int right) {
while (left < right) {
if (str[left] == str[right]) {
left++;
right--;
continue;
}
return false;
}
return true;
}
代码
class Solution {
public:
string longestPalindrome(string s) {
string ret = s.substr(0, 1);
for (int i = 0; i < s.length(); i++) {
for (int j = i + 1; j < s.length(); j++) {
if (j - i + 1 > ret.length() && IsPalindRomic(s, i, j)) {
ret = s.substr(i, j - i + 1);
}
}
}
return ret;
}
bool IsPalindRomic(string& str, int left, int right) {
while (left < right) {
if (str[left] == str[right]) {
left++;
right--;
continue;
}
return false;
}
return true;
}
};
https://www.bilibili.com/video/BV1dN4y1g7p9
总结
双重遍历 + 判断回文串
字串长度为 j - i + 1,当字串长度 > 当前最长的回文串长度时 再进行回文串判断
对于回文串的判断是每次判断最左最右字符是否相等,如果相等left++、right–继续判断是否相等。