classSolution{public String shortestPalindrome(String s){int n = s.length();int base =131, mod =1000000007;int left =0, right =0, mul =1;int best =-1;for(int i =0; i < n;++i){left =(int)(((long) left * base + s.charAt(i))% mod);right =(int)((right +(long) mul * s.charAt(i))% mod);if(left == right){best = i;}//倒敘進制mul =(int)((long) mul * base % mod);}String add =(best == n -1?"": s.substring(best +1));StringBuffer ans =newStringBuffer(add).reverse();ans.append(s);return ans.toString();}}
2. KMP
復雜度
classSolution{public String shortestPalindrome(String s){int n = s.length();int[] fail =newint[n];Arrays.fill(fail,-1);//next數組for(int i =1; i < n;++i){int j = fail[i -1];while(j !=-1&& s.charAt(j +1)!= s.charAt(i)){j = fail[j];}if(s.charAt(j +1)== s.charAt(i)){fail[i]= j +1;}}int best =-1;for(int i = n -1; i >=0;--i){while(best !=-1&& s.charAt(best +1)!= s.charAt(i)){best = fail[best];}if(s.charAt(best +1)== s.charAt(i)){++best;}}String add =(best == n -1?"": s.substring(best +1));StringBuffer ans =newStringBuffer(add).reverse();ans.append(s);return ans.toString();}}作者:LeetCode-Solution
鏈接:https://leetcode-cn.com/problems/shortest-palindrome/solution/zui-duan-hui-wen-chuan-by-leetcode-solution/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。