您的位置:首页 > 其它

[leetcode 5]longest palindromic substring

2015-06-05 14:53 417 查看
1 题目:

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.

Hide Tags
String

2 思路
开始我想了一种思路,对于那个特例输入:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

时间超了,我也没想出其他的办法。

后来看这个帖子:https://leetcode.com/discuss/17622/optimized-n-square-solution-in-java

它是采用了贪心法。里面解释也很详细,不再说了。

自己动手敲了一遍,实现了。

3 代码

最开始我的代码,时间超了

public class Solution {
public String longestPalindrome(String s){
int end = s.length() - 1;
int length = end + 1;
String longestSubString = "";
for (int i = 0; i < length; i++) {
int start = i;
int rear = end;
int temp = rear;
while( start < rear ){
if (s.charAt(start) == s.charAt(rear)) {
start++;
rear--;
}else {
start = i;
temp--;
rear = temp;
}

if (start >= rear) {//结束了
if (longestSubString.length() < s.substring(i, temp + 1).length()) {
longestSubString = s.substring(i, temp+1);
}
if(longestSubString.length() == s.substring(i,end+1).length()){
return longestSubString;
}
}

}
}

return longestSubString;
}
}


看懂别人代码后,自己实现的:

public class Solution {
public String longestPalindrome(String s){
char[] chars = s.toCharArray();
int len = s.length();

while(len >= 0){
for(int i = 0; i + len - 1 < chars.length; i++){
int right = i;
int left = i + len - 1;

boolean isPalin = true;
while(right <= left){
if(chars[right] == chars[left]){
right++;
left--;
continue;
}else{
isPalin = false;
break;
}
}
if(isPalin){
return s.substring(i, i + len);
}
}
len--;
}

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