214. 最短回文串
给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串。找到并返回可以用这种方式转换的最短回文串。
示例 1:
class Solution { public static String shortestPalindrome(String s) { StringBuilder r = new StringBuilder(s).reverse(); String str = s + "#" + r; int[] next = next(str); //如果是回文串 # //next[str.length]=7,r.substring(0,0)=""输出原字符串 //如果 # next[str.length]=5 //r.substring(0,6-5),只需要第一位 String prefix = r.substring(0, r.length() - next[str.length()]); return prefix + s; } // next数组 //KMP的next[j]=x就是0~x-1与 j-x~j-1 的元素是相同的 //大概是这样 private static int[] next(String P) { int[] next = new int[P.length() + 1]; next[0] = -1; int k = -1; int i = 1; //next【k】保存的是我上次相等的时候 //不相等的时候我就从我上一次相等的时候就行匹配 //i是快指针,k是慢指针 while (i < next.length) { if (k == -1 || P.charAt(k) == P.charAt(i - 1)) { next[i++] = ++k; } else { k = next[k]; } } return next; } }
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/225422.html原文链接:https://javaforall.net
