5. Longest Palindromic Substring
代码块
给出一个字符串s,找出s中的最长回文子字符串。你可以假定最大长度为1000。
例1:
Input: “babad”
Output: “bab”
Note: “aba” is also a valid answer.
例2:
Input: “cbbd”
Output: “bb”
代码块
class Solution {
public static String longestPalindrome(String s) {
String tr = "";
for(int i = 0; i < s.length(); i++){
String first = get_string(s, i, i);
String second = get_string(s, i, i + 1);
if(tr.length() < first.length()){
tr = first;//奇数回文长
}
if(tr.length() < second.length()){
tr = second;//偶数回文长
}
}
return tr;
}
public static String get_string(String s, int left, int right){
String result = "";
while( left >= 0 && right <= s.length() - 1 && s.charAt(left) == s.charAt(right)){
left --;
right ++;
}
return s.substring(left+1, right);//因为走了一步left--,所以要返回left+1.
}
}
代码分析
本题是求最长回文子字符串,第一次只考虑了奇数回文,其实还会有偶数情况。所以可以另写一个函数,注意可以调用子字符串函数,string.substring(start, stop)
这样当左右字符相等的话,从中心向两端走。如果令中心索引相等,就是奇数情况;如果不等,就是偶数情况。
注:
1. substring() 方法返回的子串包括 start 处的字符,但不包括 stop 处的字符。
2. 如果参数 start 与 stop 相等,那么该方法返回的就是一个空串(即长度为 0 的字符串)。如果 start 比 stop 大,那么该方法在提取子串之前会先交换这两个参数。