您的位置:首页 > 职场人生

LeetCode OJ --问题与解答 Word BreakII

2014-08-02 21:46 225 查看
题目

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"]
.

思路

1.1 DFS解法。把每种情况都考虑,并且使用回溯。

1.2 时间复杂度依然同题目1一样,指数时间,能够避免尽量不去使用。 // 1 dfs回溯解法
public List<String> wordBreak2_1(String s, HashSet<String> dict){
List<String> ans = new LinkedList<String>();
if(s.length()==0){
return ans;
}
String temp ="";
useme(s,dict,ans,temp);
return ans;
}

public void useme(String s, HashSet<String> dict,
LinkedList<String> ans,String temp){
// 当剩余字符串为0的时候,就代表找到解了。
if(s.length()==0){
temp.substring(0,temp.length()-1);
ans.add(temp);
return;
}
// 每次都要检查当前字符串所有可能切分长度
for(int i=0;i<s.length();i++){
String cur = s.substring(0,i+1);
if(dict.contains(cur)){
int n = temp.length();
temp=temp+cur+" ";
// 切分好后,对剩余字符串递归
useme(s.substring(i+1),dict,ans,temp);
temp=temp.substring(0,n);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  面试笔试 leetcode