文章目录
1.题目
5. 最长回文子串
给你一个字符串 s
,找到 s
中最长的 回文 子串。
示例 1:
**输入:**s = "babad"
**输出:**"bab"
**解释:**"aba" 同样是符合题意的答案。
示例 2:
**输入:**s = "cbbd"
**输出:**"bb"
2.思路
huiwen
函数:该函数用于判断字符串 s
从索引 left
到 right
的子串是否为回文串。
longestPalindrome
函数:
- 初始化最长回文子串的长度
maxLen
为 1,起始位置start
为 0。 - 使用两层嵌套循环遍历所有可能的子串,外层循环控制子串的起始位置
i
,内层循环控制子串的结束位置j
。 - 对于每个子串,调用
huiwen
函数判断是否为回文串,如果是且长度大于当前最长回文子串的长度,则更新maxLen
和start
。 - 最后使用
substr
函数提取最长回文子串并返回。
3.代码
class Solution {
public:
bool huiwen(string s, int left, int right){
while(left<=right){
if(s[left] == s[right]){
++left;
--right;
}else{
return false;
}
}
return true;
}
string longestPalindrome(string s) {
if(s.size() < 2)return s;
int maxLen = 1; // 最长回文子串的长度,初始为 1
int start = 0; // 最长回文子串的起始位置
// 遍历所有可能的子串
for (int i = 0; i < s.size(); ++i) {
for (int j = i; j < s.size(); ++j) {
int len = j - i + 1;
if (huiwen(s, i, j) && len > maxLen) {
maxLen = len;
start = i;
}
}
}
// 提取最长回文子串
return s.substr(start, maxLen);
}
};