您的位置:首页 > 其它

Longest Palindromic Substring(最长回文子串)

2016-08-04 15:05 405 查看


5. Longest Palindromic Substring

 

Question
Editorial Solution
 My Submissions

Total Accepted: 121867
Total Submissions: 515479
Difficulty: Medium

题目描述:
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.

Subscribe to see which companies asked this question

Show Tags

Hide Similar Problems
 (H) Shortest Palindrome (E)
Palindrome Permutation (H) Palindrome Pairs

Have you met this question in a real interview? No

Thanks for your feedback.

Discuss Pick
One

题目思路:

从头开始遍历字符串,该字符的前后两个字符相等,则继续比较前面与后面的字符串,直到比较出不相等或者是到达了字符串的边界,记录此长度,若是比当前的最大记录大则   替换最大值。

代码如下:package cn.edu.bupt;

/**
* Created by jiaochenchen on 2016/8/4.
*/
public class LongestPalindromicSubstring_5 {
public String longestPalindrome(String s) {
if(s==null||s.length()==0){return "";}
if(s.length()==1){return s;}
int len=s.length();
int maxlen=0;
int start=0;
int end=0;
for(int index=0;index<len;index++){
if(index<len&&((index-1)>=0&&index+1<len&&s.charAt(index-1)==s.charAt(index+1))||((index+1)<len&&s.charAt(index+1)==s.charAt(index))){
if(index-1>=0&&s.charAt(index-1)==s.charAt(index+1)){
int i=index-1;
int j=index+1;
int tempmaxlen=1;
while(i>=0&&j<len&&s.charAt(i)==s.charAt(j)){
tempmaxlen+=2;
if(tempmaxlen>maxlen){maxlen=tempmaxlen;start=i;end=j;}
j++;i--;

}
}
if(s.charAt(index)==s.charAt(index+1)){
int i=index;
int j=index+1;
int tempmaxlen=0;
while(i>=0&&j<len&&s.charAt(i)==s.charAt(j)){
tempmaxlen+=2;
if(tempmaxlen>maxlen){maxlen=tempmaxlen;start=i;end=j;}
j++;i--;

}

}

}
}
System.out.println(start);
System.out.println(end);
return s.substring(start,end+1);
}
别人的高级代码,比我的代码高端在了在处理重复元素上,直接越过重复的元素,而不是处理每一个与前面相同的元素,而且设置了j元素,守在最初的i位置上,代码十分优雅
<pre name="code" class="cpp">string longestPalindrome(string s) {
if (s.empty()) return "";
if (s.size() == 1) return s;
int min_start = 0, max_len = 1;
for (int i = 0; i < s.size();) {
if (s.size() - i <= max_len / 2) break;
int j = i, k = i;
while (k < s.size()-1 && s[k+1] == s[k]) ++k; // Skip duplicate characters.
i = k+1;
while (k < s.size()-1 && j > 0 && s[k + 1] == s[j - 1]) { ++k; --j; } // Expand.
int new_len = k - j + 1;
if (new_len > max_len) { min_start = j; max_len = new_len; }
}
return s.substr(min_start, max_len);
}



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