LeetCode——139. 单词拆分

先用set去重:

 public boolean wordBreak(String s, List<String> wordDict) {
        //dp
        int n = s.length();
        boolean[] dp = new boolean[n+1];
        dp[0] = true;
        Set<String> dict = new HashSet<>(wordDict);
        for(int i = 1; i <= n ; i++)
        {
           for(int j = 0; j < i ; j++)
           {
               String str = s.substring(j,i);
               if(dict.contains(str) && dp[j])
               {
                   dp[i] = true;
                   break;
               }
           }
        }
        return dp[n];
    }

记忆法dp

public boolean wordBreak(String s, List<String> wordDict) {
        //dp
        int n = s.length();
        boolean[] dp = new boolean[n+1];
        dp[0] = true;
       
        for(int i = 1; i <= n ; i++)
        {
           for(String word: wordDict)
           {
               if(word.length() <= i)
               {
                   if(dp[i - word.length()] && word.equals(s.substring(i-word.length(),i)))
                   {
                       dp[i] = true;
                       break;
                   }
               }
           }
        }
        return dp[n];
    }
原文地址:https://www.cnblogs.com/swqblog/p/13271968.html