Google – Minimum Add to Make a Palindrome



Google – Minimum Add to Make a Palindrome

Given a string, return the minimum number of characters to add to make the string a Palindrome

[Analysis]
和leetcode214 shortest palindrome有点类似,不过这题可以算shortest palindrome的一个follow up。因为这道题可以在任何一个位置插入character,而shortest palindrome只能在两端append。

[Solution]
Dynamic Programming. 跟longest palindrome substring的DP解法一样。

lookup[i][j]表示minimum add to make substring from i to j a palindrome
if s.charAt(i) == s.charAt(j)
lookup[i][j] = lookup[i + 1][j – 1]
else
lookup[i][j] = Math.min(lookup[i][j – 1], lookup[i + 1][j]) + 1

 


而对于Leetcode214 shortest palindrome这样在两段append来make palindrome的,除了从mid开始往一边扫的方法之外。还有一种O(n) KMP的做法。比如leetcode这道:

str = s + '#' + reversed_s

然后用kmp找longest prefix&suffix的方法找到str的longest prefix & suffix. Reverse一下s的剩余部分就是要往左边append的字符串。

如果是从右边append,那str = reversed_s + '#' + s就可以了。

[Note]
注意中间的'#'必不可少. 不然会出bug。

比如aabba这个case, 如果不加'#',str = aabbaabbaa, 这样longest prefix & suffix就会变成aabbaa,超出了原来string的长度。

加个'#'之后就可以保证longset prefix & suffix的length小于等于s.length()


Read full article from Google – Minimum Add to Make a Palindrome


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts