leetcode 214 Shortest Palinrome

来源:互联网 发布:可以用淘宝贷款吗 编辑:程序博客网 时间:2024/06/05 00:56

这题可以用KMP算法求解,如果大家不懂KMP可以先去看看KMP算法思路。

题目:
Given a string S, you are allowed to convert it to a palindrome by adding characters in front of it. Find and return the shortest palindrome you can find by performing this transformation.

For example:

Given “aacecaaa”, return “aaacecaaa”.

Given “abcd”, return “dcbabcd”.

代码如下:

class Solution {    //KMP算法思路 以及 部分匹配表Table的求解方法。    public String shortestPalindrome(String s) {          if(s==null||s.length()==0||s.length()==1) return s;          StringBuilder sb=new StringBuilder(s);          //这里加#的原因是防止出现这种情况          //s="aaaaa" 如果没有#,这种情况会出错          String str=s+"#"+sb.reverse().toString();          int[] table=getTable(str);          int mpl=table[table.length-1];          sb=new StringBuilder(s.substring(mpl,s.length()));          return sb.reverse().toString()+s;    }    //得到Table表,KMP算法比较重要的一块就是求解Table数组。    public int[] getTable(String s){        int[] table=new int[s.length()];        int index=0;        for(int i=1;i<s.length();i++){            if(s.charAt(index)==s.charAt(i)){                table[i]=table[i-1]+1;                index++;            }else{                index=table[i-1];                while(index>0&&s.charAt(index)!=s.charAt(i))                    index=table[index-1];                if(s.charAt(index)==s.charAt(i))                    index++;                table[i]=index;            }        }        return table;    }}
原创粉丝点击