您的位置:首页 > 其它

Leetcode || Longest Palindromic Substring

2015-10-21 10:11 411 查看
Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.

class Solution {
public String longestPalindrome(String s) {
int max_len = 0;
String max_str = null;
for(int i=0; i<s.length(); i++) {
for(int j=i+1; j<s.length(); j++) {
if(isPalidndrom(s.substring(i, j+1))) {
if(j+1-i>max_len) {
max_str = s.substring(i, j+1);
}
}
}
}
return max_str;
}

private boolean isPalidndrom(String str) {
StringBuffer sb = new StringBuffer(str);
String str1 = sb.reverse().toString();
if(str1.equals(str))
return true;
else
return false;
}
}


超时!

/*
* 在所有字符左右加'#',就可以不分字符串长度奇偶考虑
*/
class Solution1 {
public String longestPalindrome(String s) {
String str = "";
for(int i=0; i<s.length(); i++) {
str = str + '#' + s.charAt(i);
}
str = str + '#';
System.out.println(str);
int max_len = 0;
int center = 0;
for(int i=2; i<str.length(); i++) {
int start = i - 1;
int end = i + 1;
int len = 0;

while(start>=0 && end<str.length()) {
if(String.valueOf(str.charAt(start)).equals(String.valueOf(str.charAt(end)))) {
len += 2;
}
start -= 1;
end += 1;
}
if(len>max_len) {
max_len = len;
center = i;
//System.out.println(max_len);
}
}
return str.substring(center-(max_len-1)/2, center+(max_len+1)/2+1).replaceAll("#", "");
}
}


超时!

class Solution2 {
public String longestPalindrome(String s) {
int max_len = 0;
String longest = null;
boolean [][] table = new boolean[s.length()][s.length()];

if(s==null || s.isEmpty())  //判断字符串为空的方法,null没地址,""值为空,但有地址
System.exit(0);

//单个字符都是回文
for(int i=0; i<s.length(); i++) {
table[i][i] = true;
max_len = 1;
longest = s.substring(i, i+1);
}
//判断两个字符是否是回文
for(int i=0; i<s.length()-1; i++) {
if(s.charAt(i) == s.charAt(i+1)) {
table[i][i+1] = true;
max_len = 2;
longest = s.substring(i, i+2);
}
table[i][i+1] = false;
}
//求长度大于2的子串是否是回文串
for(int len=3; len<=s.length(); len++) {
System.out.println(len);
for(int i=0, j; (j=i+len-1)<s.length(); i++) {
if(s.charAt(i) == s.charAt(j)) {
table[i][j] = true;
max_len = len;
longest = s.substring(i, j+1);
}
else
table[i][j] = false;
}
}

return longest;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode 回文串