您的位置:首页 > 理论基础 > 数据结构算法

Longest Palindromic Substring --leetcode 数据结构第五题

2016-06-01 18:07 309 查看
原题目: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

题目的意思是给定字符串,找出字符串中的最长的回文并输出。

第一种解决思路:暴力穷举法,这种方法虽然能找出,但是效率比较低,提交的时候会报超时。 有人会问为什么第二个for循环for (int j = i + resultStr.length(); j < s.length() + 1; j++) {这么写,这是因为想增加步长来减少运算量,因为小于这个长度的字符串就算是回文,也不是我们想要的结果。

public String longestPalindrome(String s) {
String resultStr = "";
for (int i = 0; i < s.length(); i++) {
for (int j = i + resultStr.length(); j < s.length() + 1; j++) {
String temp=s.substring(i, j);
StringBuffer tempStr = new StringBuffer(temp);
tempStr = tempStr.reverse();
if (temp.equals(tempStr.toString())) {
if(tempStr.length()>resultStr.length()){
resultStr=tempStr.toString();
}
}
}
}
return resultStr;
}


第二种:

public String longestPalindrome(String s) {
if (s.isEmpty()) {
return null;
}
if (s.length() == 1) {
return s;
}
String longest = s.substring(0, 1);
for (int i = 0; i < s.length(); i++) {
// get longest palindrome with center of i
String tmp = helper(s, i, i);
if (tmp.length() > longest.length()) {
longest = tmp;
}

// get longest palindrome with center of i, i+1
tmp = helper(s, i, i + 1);
if (tmp.length() > longest.length()) {
longest = tmp;
}
}
return longest;
}

// Given a center, either one letter or two letter,
// Find longest palindrome
public static String helper(String s, int begin, int end) {
while (begin >= 0 && end <= s.length() - 1
&& s.charAt(begin) == s.charAt(end)) {
begin--;
end++;
}
String subS = s.substring(begin + 1, end);
return subS;

}


虽然看起来很长,但是却能通过。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode 数据结构