题解 | #最长回文子串#先写整体思路伪方法,在写具体实现,保证思路清晰
最长回文子串
http://www.nowcoder.com/practice/b4525d1d84934cf280439aeecc36f4af
import java.util.*;
public class Solution {
public int getLongestPalindrome(String A, int n) {
// write code here
if(n == 0 || n == 1){
return n;
}
int maxLength = 0;
for(int i = 0; i < n; i++){
//每取出一个元素后 都从末尾去寻找相等的值 来判断二者之间是否可以组成回文子串
char next = A.charAt(i);
int[] ends = findNextFromEnd(A,i,next);
for(int j = 0;j<ends.length;j++){
//依次判断每一个位置二者之间是否可以组成回文子串
boolean b = can(A,i,ends[j]);
if(b){
maxLength = Math.max(maxLength,ends[j] - i + 1);
}
}
}
return maxLength;
}
private int[] findNextFromEnd(String A,int i,char next){
ArrayList<Integer> result = new ArrayList<>();
for(int j = A.length() - 1; j > i; j--){
char next2 = A.charAt(j);
if(next2 == next){
result.add(j);
}
}
int[] res = new int[result.size()];
for(int k = 0;k< result.size();k++){
res[k] = result.get(k);
}
return res;
}
private boolean can(String A,int begin,int end){
while(begin < end){
if(A.charAt(begin) == A.charAt(end)){
begin ++;
end --;
} else {
return false;
}
}
return true;
}
}