1.问题描述
给你一个字符串
s
,找到s
中最长的回文子串。如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。
2.实例
输入:s="abac"
输出:"aba"
解释:"aba"是s的最长回文字串
输入:s="abb"
输出:"bb"
解释:"bb"是s的最长回文字串
3.解法
首先设计一个huiWen方法来判断所传的字符串是不是回文串。根据题意所求的是最长的回文子串,那么我就从最长的字串开始尝试,看他是不是回文串,如果不是就从字串长度减一中寻找,这样找到的第一个回文串就是最长回文串了。一开始定义left=0,right=s的长度然后每循环一次,right就减一,内层循环中左右指针一次往右移动一个单位,知道right的下标又到s.length说明这个长度的字串没有回文串,结束内层循环返回外层循环,right再减一。这样就像一个方框再从最长的子串开始一个一个尝试。
public static String longestPalindrome(String s){
for (int i = s.length(); i >0 ; i--) {
int left=0,right = i;//设置初始的方框长度。
for (;right <=s.length();) {
if (huiWen(s.substring(left,right))){
return s.substring(left,right);
}
left++;
right++;
}
}
return null;
}
public static boolean huiWen(String s) {
int left = 0, right = s.length()-1;
while (left<=right){
if (s.charAt(left)!=s.charAt(right)){
return false;
}
left++;
right--;
}
return true;
}