原题目: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;
}
虽然看起来很长,但是却能通过。