LeetCode 13 Word Break

Given s string s and a dictionary of words dict, determine if s can be segmented into a space-separated sequence of one or more dictionary words.

For example, given

s = "leetcode",

dict = ["leet", "code"].

Return true because "leetcode" can be segmented as "leet code".

分析:

最简单的想法,分解问题,假设我们从头开始找到一个单词,则如果剩下字符串可以被分割,则总的字符串就可以被分割,由此产生最初始的递归解法。

单但我们发现,在判断后面字符串能否分割的过程中,求解了大量的重复子问题,只要有重复子问题,则就应该想到动态规划,而动态规划的基本思路就是用一个表记录中间结果,以备之后查询。

public class Solution {
    public boolean wordBreak(String s, Set<String> dict) {
        
       boolean[] table = new boolean[s.length()+1];
       table[0] = true;
       
       for(int i=1; i<s.length()+1; i++){
           for(int k=0; k<i; k++){
               table[i] = table[k] && dict.contains(s.substring(k, i));
               if(table[i])
                break;
           }
       }
       return table[s.length()];
    }
}


你可能感兴趣的:(动态规划,字符串分割)