题目:
链接:https://www.nowcoder.com/questionTerminal/5f3b7bf611764c8ba7868f3ed40d6b2c?answerType=1&f=discussion
来源:牛客网
给定一个字符串s和一组单词dict,判断s是否可以用空格分割成一个单词序列,使得单词序列中所有的单词都是dict中的单词(序列可以包含一个或多个单词)。
例如:
给定s=“leetcode”;
dict=["leet", "code"].
返回true,因为"leetcode"可以被分割成"leet code".
两种解法:
一、动态规划
public boolean wordBreak(String s, Set<String>wordDict){
int len=s.length();
boolean[] flags=new boolean[len+1];
flags[0]=true;
for(int i=1;i<=len;i++){
for(int j=0;j<i;j++){
if(flags[j]==true&&wordDict.contains(s.substring(j,i))){
flags[i]=true;
break;
}
}
}
return flags[len];
}
二、BFS
public boolean wordBreak(String s, Set<String> dict){
Queue<Integer> queue=new LinkedList<>();
int[] visited=new int[s.length()];
queue.add(0);
while(!queue.isEmpty()){
int start=queue.remove();
if(visited[start]==0){
for(int end=start+1;end<=s.length();end++){
if(dict.contains(s.substring(start,end))){
queue.add(end);
if(end==s.length())
return true;
}
}
}
visited[start]=1;
}
return false;
}