双指针法解决最长回文子串 Java

双指针法解决最长回文子串:

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
    }
}

 

 

posted @ 2019-10-26 22:10  德鲁大叔817  阅读(367)  评论(0)    收藏  举报