给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串。找到并返回可以用这种方式转换的最短回文串。
示例 1:
输入: “aacecaaa”
输出: “aaacecaaa”
代码
class Solution {
public int getShortestPalindrome(String s) {//求next数组的最后一个元素
char[] temp=s.toCharArray();
int n=s.length();
int[] next=new int[n+1];
int k=-1,j=0;
next[0]=-1;
while (j<n)
{
if(k==-1||s.charAt(k)==s.charAt(j))
{
j++;
k++;
next[j]=k;
}else {
k=next[k];
}
}
return next[n];
}
public String shortestPalindrome(String s) {
String t=s+'#'+new StringBuilder(s).reverse();
//将逆序字符串和原字符串拼在一起,求最长公共前缀
int max=getShortestPalindrome(t);
return new StringBuilder(s.substring(max)).reverse()+s;
}
}