Given a string s and a dictionary of words dict, add spaces in s to construct a sentence where each word is a valid dictionary word.
Return all such possible sentences.
For example, given
s = "catsanddog"
,
dict = ["cat", "cats", "and", "sand", "dog"]
.
A solution is ["cats and dog", "cat sand dog"]
.
【题意】
相比Word Break,这次不仅要判断字符串能否被分解,还要把所有的分解情况给找出来。这样的话,我在Word Break用过的暴力法就可以很容易得改成这道题。
==================== 暴力法、穷尽法 ====================
【Java代码】
class Solution { List<String> ret; public List<String> wordBreak(String s, Set<String> dict) { String[] all = dict.toArray(new String[0]); ret = new ArrayList<String>(); //如果s中有字母没在dict出现过,那么结果肯定为false //这段代码的作用就是防止暴力法超时,有点投机的做法,我在Word Break解题报告中已讲过 for (int i = 0; i < s.length(); i++) { boolean flag = false; for (int j = 0; j < all.length; j++) { if (all[j].indexOf(s.charAt(i)) > -1) { flag = true; break; } } if (!flag) { return ret; } } nextWord(0, s, all, ""); return ret; } void nextWord(int pos, String s, String[] all, String sent) { if (pos == s.length()) { ret.add(sent.trim()); } for (int i = 0; i < all.length; i++) { if (s.indexOf(all[i], pos) == pos) { String str = sent; str += all[i] + " "; nextWord(pos + all[i].length(), s, all, str); } } } }
时间: 2024-11-08 20:24:14