先用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]; }