题目要求
给你一个字符串 s,找到 s 中最长的回文子串。
示例1
输入:s = “babad”
输出:“bab”
解释:“aba” 同样是符合题意的答案。
示例2
输入:s = “cbbd”
输出:“bb”
java代码如下
class Solution {
public String longestPalindrome(String s) {
String res = "";
//遍历所有点(奇数一个点,偶数两个点)为中心的回文串
for(int i = 0;i < s.length(); i++) {
//当回文串是奇数时,由一个中心点向两边移动
String s1 = palindrome(s,i,i);
//当回文串是偶数时,由中间的两个中心点向两边移动
String s2 = palindrome(s,i,i+1);
//比较最长的
res = res.length() > s1.length() ? res : s1;
res = res.length() > s2.length() ? res : s2;
}
return res;
}
//函数:寻找回文串
private String palindrome(String s, int left, int right) {
//注意区间
while (left >= 0 && right <s.length()) {
//是回文串时,继续向两边移动
if(s.charAt(left) == s.charAt(right)) {
left--;
right++;
}
else {
break; //否则退出
}
}
return s.substring(left + 1,right); //返回子串
}
}
python代码如下
class Solution:
def longestPalindrome(self, s: str) -> str:
n, m = 0, 0
for i in range(len(s)):
left, right = i, i
while left >= 0 and s[left] == s[i]: left -= 1
while right < len(s) and s[right] == s[i]: right += 1
while left >= 0 and right < len(s) and s[left] == s[right]:
left -= 1
right += 1
if m - n + 1 < right - left - 1:
n, m = left + 1, right - 1
return s[n:m+1]
心得分析
这道题目中规中矩,思路也不是特别难想。具体代码分析标注在Java代码里,python的思路与Java相同。