Split String into Palindromes - Coding in a Smart Way



Split String into Palindromes - Coding in a Smart Way

Discussion This is another dynamic programming problem. Note that greedy algorithm does not work here. For example, s = "aaaaaadda", we can split into "aaaaa" & "adda". If we take the longest palindrome "aaaaaa", it will require 2 cuts. Let's find how we can compute the minimum number of cuts. It is actually very simple. We denote numberOfSplits[i] the minimum number of cuts to split the substring starting at s[i]. We also denote s[i, j] the substring from i to j. We might ignore either i or j to denote the substring ending or starting at j or i respectively. The time complexity of the program is O(N3) where N is the length of string s. public static int split(String s) { //numberOfSplits[i] is the minimum number of splits for substring starting at s[i] int [] numberOfSplits = new int[s.length()]; numberOfSplits[s.length() - 1] = 0; for (int i = s.length() - 2; i >= 0; i--) { int minSplit = Integer.MAX_VALUE; for (int j = i; j < s.length(); j++) { if (Palindrome.isPalindrome(s.

Read full article from Split String into Palindromes - Coding in a Smart Way


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