单词拆分-动态规划

class Solution {
    public boolean wordBreak(String s, List<String> wordDict) {
        //动态规划 s[i]以i结尾的子串是否满足题干条件
        boolean [] dp=new boolean[s.length()];
        Set<String> set1=new HashSet();
        //把worddict放到字典中
        for(String str:wordDict){
            set1.add(str);
        }
        for(int r=0;r<s.length();r++){
            if(set1.contains(s.substring(0,r+1))){
                dp[r]=true;
                continue;
            }
            
            for(int j=0;j<r;j++){
                if(dp[j]&&set1.contains(s.substring(j+1,r+1))){
                    dp[r]=true;
                    break;
                }            
            }
        }
        return dp[s.length()-1];
    }
}

 

public boolean wordBreak(String s, List<String> wordDict) {
        Set<String> wordDictSet=new HashSet(wordDict);
        boolean[] dp = new boolean[s.length() + 1]; //dp[i] 表示以第i个字符结尾的字符串是否符合要求
        dp[0] = true;
        for (int i = 1; i <= s.length(); i++) {
            for (int j = 0; j < i; j++) {
                //第 j 个字符的子串和第 j 到 i 的子串都符合要求,返回true
                if (dp[j] && wordDictSet.contains(s.substring(j, i))) {
                    dp[i] = true;
                    break;
                }
            }
        }
        return dp[s.length()];
    }

 

posted @ 2019-07-07 15:36  hhhl  阅读(303)  评论(0编辑  收藏  举报