DP動態規劃專題五 :LeetCode 140. Word Break II
阿新 • • 發佈:2018-12-30
LeetCode 140. Word Break II
Given a non-empty string s and a dictionary wordDict containing a list of non-empty words, add spaces in s to construct a sentence where each word is a valid dictionary word. Return all such possible sentences.
Note:
The same word in the dictionary may be reused multiple times in the segmentation.
You may assume the dictionary does not contain duplicate words.
Example 1:
Input:
s = "catsanddog"
wordDict = ["cat", "cats", "and", "sand", "dog"]
Output:
[
"cats and dog",
"cat sand dog"
]
Example 2: Input: s = "pineapplepenapple" wordDict = ["apple", "pen", "applepen", "pine", "pineapple"] Output: [ "pine apple pen apple", "pineapple pen apple", "pine applepen apple" ] Explanation: Note that you are allowed to reuse a dictionary word.
Example 3:
Input:
s = "catsandog"
wordDict = ["cats", "dog", "sand", "and", "cat"]
Output:
[]
不解釋,程式碼如下:
public List<String> wordBreak(String s, List<String> wordDict) { HashSet<String> set = new HashSet<>(); for (String ss : wordDict) { set.add(ss); } boolean[] breakable = new boolean[s.length() + 1]; breakable[0] = true; for (int i = 0; i < s.length(); i++) { for (int p = 0; p <=i; p++) { String curS = s.substring(p, i+1); if (set.contains(curS) && breakable[p]) { breakable[i+1] = true; } } } if (!breakable[s.length()]) { return new ArrayList<>(); } List<List<String>> allResult = new ArrayList<>(); for (int i = 0; i < s.length(); i++) { List<String> res = new ArrayList<>(); for (int p = 0; p <= i; p++) { String curs = s.substring(p, i + 1); if (set.contains(curs)) { if (p == 0) { res.add(curs); } else if (allResult.get(p-1).size() != 0) { for (String ss : allResult.get(p-1)) { ss = ss + " " + s.substring(p, i + 1); res.add(ss); } } else { continue; } } } allResult.add(res); } return allResult.get(allResult.size() - 1); }