LeetCode5. 最长回文子串(Java)
题目:
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例:
代码:
- 解法一
class Solution {
public String longestPalindrome(String s) {
//截取出全部子串
int len = s.length();
for (int i = len; i > 0; i--) {
for (int start = 0, end = i-1; end < len; start++, end++) {
//截取出子串
String temp = s.substring(start, end + 1);
//调用判断是否为回文字符串方法
if (isPalindrome(temp)) {
return temp;
}
}
}
return "";
}
//利用夹逼思想判断字符串是否是回文子串
public static boolean isPalindrome(String temp) { // 夹逼思想
int start = 0;
int end = temp.length() - 1;
while (start < end) {
if (temp.charAt(start) == temp.charAt(end)) {
start++;
end--;
} else {
return false;
}
}
return true;
}
}
代码解释:
- 别人的代码
class Solution {
public String longestPalindrome(String s) {
int m=s.length();
if(m==0)
return "";
//取出每个子串
for(int len=m;len>1;len--){
for(int i=0;i<m-len+1;i++){
//判断是否是回文子串
if(isTrue(s,i,i+len-1))
return s.substring(i,i+len);
}
}
return s.substring(0,1);
}
//利用夹逼思想判断子串是否是回文子串
private boolean isTrue(String s,int i,int j){
while(i<=j){
if(s.charAt(i)!=s.charAt(j))
return false;
i++;
j--;
}
return true;
}
}