Longest Palindromic Substring
简介:字符串中最长的回文字符串
回文字符串:中心对称的字符串 ,如 mom,noon
问题详解:
给定一个字符串s,寻找字符串中最长的回文字符串,假设字符串s长度最长为1000.
举例:
1:
输入: “babad”
输出: “bab”
注: “aba” 也是一种答案.
2:
输入: “cbbd”
输出: “bb”
官方实现 : Expand Around Center
我们可以从字符串中心寻找回文字符串,例如"aba"的中心为’b’,"baab"的中心为两个a中间,所以分两种情况考虑,一种是中心为i,另一种是i和i+1,这里我们需要注意的是String里的方法substring(index start,index end),第二个s是小写的,并且是从start开始一直到end结尾但不包含end索引处的字符,所以我们要end+1
public String longestPalindrome(String s) {
if (s == null || s.length() < 1) return "";
int start = 0, end = 0;
for (int i = 0; i < s.length(); i++) {
int len1 = expandAroundCenter(s, i, i);
int len2 = expandAroundCenter(s, i, i + 1);
int len = Math.max(len1, len2);
if (len > end - start) {
start = i - (len - 1) / 2;
end = i + len / 2;
}
}
return s.substring(start, end + 1);
}
private int expandAroundCenter(String s, int left, int right) {
int L = left, R = right;
while (L >= 0 && R < s.length() && s.charAt(L) == s.charAt(R)) {
L--;
R++;
}
return R - L - 1;
}
复杂度分析
时间复杂度分析 : O(n^2).
空间复杂度 : O(1).
小白刷题之路,请多指教— — 要么大器晚成,要么石沉大海