LeetCode 214. Shortest Palindrome - Stephen Wong的专栏 - 博客频道 - CSDN.NET



LeetCode 214. Shortest Palindrome - Stephen Wong的专栏 - 博客频道 - CSDN.NET

题意为,允许在字符串的头部添加字符,使其成为回文。最简单的方法是讲该字符串翻转为s2, s2 + s1即为回文,但题目要求的是最短的回文串。


于是问题便转换为一个,求以原字符串首字符开头(s[0])的最长子串的长度(亦即使得s.substr(0, length)为回文的最大length值)这么一个子问题。

       ―― 可以想象,当求得这么一个length后,我们将s.substr(length)翻转添加到s头部即为所求(亦即s.substr(length).reverse() + s即为所求)

这个子问题可暴力求解O(N^2)的复杂度,也可以用下述的Manacher算法在O(N)时间内求解。


Manacher算法实现了在O(N)时间内求字符串的最长回文子串(LeetCode 5. Longest Palindromic Substring)

在了解了该算法后,要求以原字符串首字符开头(s[0])的最长子串的长度,只要添加约束p[i] == i, 表示以i为中心回文串,其一边的长度为p[i]. 

若p[i] == i, 那么从i往前推p[i]个位置,那就是原点 ―― 所以这是一个包含原字符串s首字母s[0]的回文子串。

通过Manacher算法,求满足p[i] == i的最大i值即可。


Read full article from LeetCode 214. Shortest Palindrome - Stephen Wong的专栏 - 博客频道 - CSDN.NET


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