双指针法解决最长回文子串:
public class Test {
//寻找最长回文串
public static String find(String str,int l,int r){
while(l>=0 && r<str.length() && str.charAt(l)==str.charAt(r)){
l--;
r++;
}
return str.substring(l+1,r);//subString截串是左闭右开型
}
public static String findLongest(String str){
String s="";
for (int i = 0; i < str.length(); i++) {
//寻找以str.charAt(i)为中心的最长回文子串
String s1=find(str,i,i);
//寻找以str.charAt(i) str.charAt(i) 为中心的最长子串
String s2=find(str,i,i+1);
//s=longest(s,s1,s2)
s=s.length()>s1.length()?s:s1;
s=s.length()>s2.length()?s:s2;
}
return s;
}
public static void main(String[] args) {
String s="abacd";
System.out.println(findLongest(s));
// aba
}
}