最长回文子串
题目描述
最长回文子串
思路
模拟
枚举字符串s中的每一位,作为回文串的中心点,左右进行扩展,直到达到边界或者不满足回文串定义为止。
Java实现
class Solution {
public String longestPalindrome(String s) {
String ans = "";
for (int i = 0; i < s.length(); ++i) {
// 回文串长度为奇数
int l = i-1, r = i+1;
String sub = getString(s, l, r);
if (sub.length() > ans.length()) ans = sub;
// 回文串长度为偶数
l = i-1;
r = i+1-1;
sub = getString(s, l, r);
if (sub.length() > ans.length()) ans = sub;
}
return ans;
}
private String getString(String s, int l, int r) {
while (l >= 0 && r < s.length() && s.charAt(l) == s.charAt(r)) {
l--;
r++;
}
return s.substring(l+1, r);
}
}
Python实现
class Solution:
def longestPalindrome(self, s: str) -> str:
ans, n = "", len(s)
def getString(l, r):
while l >= 0 and r < n and s[l] == s[r]:
l -= 1
r += 1
return s[l+1:r]
for i in range(n):
l, r = i-1, i+1
sub = getString(l, r)
if (len(sub) > len(ans)):
ans = sub
l, r = i-1, i+1-1
sub = getString(l, r)
if (len(sub) > len(ans)):
ans = sub
return ans