题目描述:
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
解题思路:
- 首先还是弄清题意,找出给定字符串中的最长回文串
- 这题在解题的思路上有点类似于找出给定字符串的最长不重复子串
- 其次我们要弄清回文串的可能存在的结构,比如:bab, bb
- 设置一个判断是否是回文串的函数,这样代码看起来比较清爽
代码如下:
// 设置全局变量,用来存储最长的回文串
int len = 0;
int left = 0;
public String longestPalindrome(String s) {
if(s.length() < 2 || s == null ) return s;
for(int i = 0; i < s.length() - 1; i++){
// 考虑到 bab,bb 这样的结构,所以这里设置两个判断
isHuiwen(s, i, i);
isHuiwen(s,i, i + 1);
}
return s.substring(left, left + len);
}
// 从当前位置出发,向字符串的两边扩散
private void isHuiwen(String s, int i, int j){
while(i >= 0 && j < s.length() && s.charAt(i) == s.charAt(j)){
i--;
j++;
}
// 将当前的字符串与已经存储的进行比较,若长度较长,则进行迭代
if(j - i - 1 > len){
len = j - i - 1;
left = i + 1;
}
}