文章目录
- 1.题目
- [5. 最长回文子串](https://leetcode.cn/problems/longest-palindromic-substring/description/)
- 2.思路
- 3.代码
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; // 最长回文子串的长度,初始为 1int 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);}
};