最长回文子串
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: “babad” 输出: “bab”
注意: “aba” 也是一个有效答案。
示例 2:
输入: “cbbd” 输出: “bb”
解法一:我自己原来用的暴力解法,但是超时了。
class Solution {
public boolean isPalindrome (String s){
int len=s.length();
for(int i=0;i<len/2;i++){
if(s.charAt(i)!=s.charAt(len-i-1)){
return false;
}
}
return true;
}
public String longestPalindrome(String s) {
String res="";
int max=0;
int len=s.length();
for(int i=0;i<len;i++)
for(int j=i+1;j<=len;j++){
String test=s.substring(i,j);
if(isPalindrome(test)&&test.length()>max){
max=test.length();
res=s.substring(i,j);
}
}
return res;
}
}
解法二:看题解中用到的中心扩散法。
public String longestPalindrome1(String s) {
if (s == null || s.length() == 0) {
return "";
}
int strLen = s.length();
int left = 0;
int right = 0;
int len = 1;
int maxStart = 0;
int maxLen = 0;
for (int i = 0; i < strLen; i++) {
left = i - 1;
right = i + 1;
while (left >= 0 && s.charAt(left) == s.charAt(i)) {
len++;
left--;
}
while (right < strLen && s.charAt(right) == s.charAt(i)) {
len++;
right++;
}
while (left >= 0 && right < strLen && s.charAt(right) == s.charAt(left)) {
len = len + 2;
left--;
right++;
}
if (len > maxLen) {
maxLen = len;
maxStart = left;
}
len = 1;
}
return s.substring(maxStart + 1, maxStart + maxLen + 1);
}
作者:reedfan
链接:https://leetcode-cn.com/problems/longest-palindromic-substring/solution/zhong-xin-kuo-san-fa-he-dong-tai-gui-hua-by-reedfa/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。