java 最短回文子串

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 最短回文子串相关的知识,希望对你有一定的参考价值。

//kmp
public String shortestPalindrome(String s){
    String r = new StringBuilder(s).reverse().toString();
    String t = s+"#"+r;
    int[] next = new int[t.length()];
    for(int i = 1; i < t.length() ; i++){
        int j= next[i-1];//next[i-1]就是第i个字符能够匹配的最长的前缀的长度
        while(j >0 && t.charAt(i)!=t.charAt(j)) j=next[j-1];//逐渐缩小匹配范围
        j += (t.charAt(i)==t.charAt(j))?1:0;//最终还是要看最小范围中j和i匹配不匹配
        next[i]=j;//next[j]表示包含j对应的字符在内的最长相同前后缀
    }
    return r.substring(0,s.length()-next[t.length()-1])+s;
}

以上是关于java 最短回文子串的主要内容,如果未能解决你的问题,请参考以下文章

添加回文串

java 214.最短回文(KMP).java

java 214.最短回文(KMP).java

java 214.最短回文(KMP).java

java 214.最短回文(KMP).java

java 214.最短回文(KMP).java