java 214.最短回文(KMP).java
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 214.最短回文(KMP).java相关的知识,希望对你有一定的参考价值。
public class Solution {
public String shortestPalindrome(String s) {
StringBuilder sb = new StringBuilder();
sb.append(s).append('#').append(new StringBuilder(s).reverse());
int longestPal = getPrefixFunction(sb.toString());
StringBuilder res = new StringBuilder(s.substring(longestPal));
res.reverse().append(s);
return res.toString();
}
private int getPrefixFunction(String pattern) {
int len = pattern.length();
int[] pi = new int[len];
pi[0] = 0;
int matched = 0;
for (int i = 1; i < len; i++) {
while (matched > 0 && pattern.charAt(i) != pattern.charAt(matched)) {
matched = pi[matched - 1];
}
if(pattern.charAt(i) == pattern.charAt(matched)) {
matched++;
}
pi[i] = matched;
}
return pi[len - 1];
}
}
以上是关于java 214.最短回文(KMP).java的主要内容,如果未能解决你的问题,请参考以下文章
java 214.最短回文(KMP).java
java 214.最短回文(KMP).java
java 214.最短回文(KMP).java
算法进阶面试题01——KMP算法详解输出含两次原子串的最短串判断T1是否包含T2子树Manacher算法详解使字符串成为最短回文串
java 最短回文子串
HDU1358 KMP(最短循环节)