算法(二十)
1、给定一个字符串s和一组单词dict,判断s是否可以用空格分割成一个单词序列,使得单词序列中所有的单词都是dict中的单词(序列可以包含一个或多个单词)。
例如:
给定s=“leetcode”;
dict=["leet", "code"].
返回true,因为"leetcode"可以被分割成"leet code".
参考代码如下:
public boolean wordBreak(String s, Set<String> dict) {
if(s==null || s.length()==0 || dict == null || dict.size() == 0){
return false;
}
boolean[] flag = new boolean[s.length() + 1];
flag[0] = true;
for(int i=1; i<=s.length();i++){
for(int j=i-1; j>=0; j--){
if(flag[j] && dict.contains(s.substring(j,i))){
flag[i] = true;
break;
}else{
flag[i] = false;
}
}
}
return flag[s.length()];
}
2、给定一个字符串s和一组单词dict,在s中添加空格将s变成一个句子,使得句子中的每一个单词都是dict中的单词
返回所有可能的结果
例如:给定的字符串s ="catsanddog",
dict =["cat", "cats", "and", "sand", "dog"].
返回的结果为["cats and dog", "cat sand dog"].
import java.util.*;
public class Solution {
public ArrayList<String> list=new ArrayList<>();
public ArrayList<String> wordBreak(String s, Set<String> dict) {
DFS(s,dict, s.length(), "");
return list;
}
private void DFS(String s, Set<String>dict, int index, String str){
if(index<=0)
if(str.length() > 0)
list.add(str.substring(0,str.length()-1));
for(int i=index; i>=0; i--){
if(dict.contains(s.substring(i, index)))
DFS(s,dict,i,s.substring(i,index)+" "+str);
}
}
}
根据自己所见所闻进行算法归纳总结