package primary_class;
import java.util.ArrayList;
import java.util.List;
public class Test{
//求一个字符串里的所有最长回文串,相同长度的全部输出
public static List<String> getString(String s){
if(s==null||s.length()<1){
return null;
}
//String res="";
List<String> res=new ArrayList<>();
//双指针法
for(int i=0;i<s.length();i++){
String s1=palindrome(s,i,i);
String s2=palindrome(s,i,i+1);
if(res.size()>0){
if(s1.length()>s2.length()){
if(res.get(0).length()==s1.length()){
res.add(s1);
}else if(res.get(0).length()<s1.length()){
res.remove(0);
res.add(s1);
}
}else{
if(res.get(0).length()==s2.length()){
res.add(s2);
}else if(res.get(0).length()<s2.length()){
res.remove(0);
res.add(s2);
}
}
}else{
res.add(s1.length()>s2.length()?s1:s2);
}
}
return res;
}
public static String palindrome(String s,int l,int r){
//不能用equals比较char类型数据
//char是基本类型,数组中的char类型元素和‘o’比较,用“==”即可。基本类型是没有方法的,所以不能调用 equals
//while(l>=0&&r<s.length()&&(s.charAt(l--))==(s.charAt(r++)));不要这样写,因为本来想表达的是只有s.charAt(l)==s.charAt(r)时才会执行l和r的移动,而现在这样写的话,即使等号不成立,l和r指针还是会移动
while(l>=0&&r<s.length()&&s.charAt(l)==s.charAt(r)){
l--;
r++;
}
// if(r<=2*l+2){
// return "";
// }
//return s.substring(l+1,r-l-1);
return s.substring(l+1,r);
}
public static void main(String[] args){
String s="ababnbba";
//System.out.print(getString(s));
List<String> res=getString(s);
for(int i=0;i<res.size();i++){
System.out.print(res.get(i)+" ");
}
}
}
输出字符串中的所有最长回文串(相同长度的全部输出)
最新推荐文章于 2022-09-26 22:20:20 发布