算法(二十)

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);
        }
    }
}

算法 文章被收录于专栏

根据自己所见所闻进行算法归纳总结

全部评论

相关推荐

努力的小明a:项目看着很眼熟,施磊老师吧,我也学的这个😋我当时是把rpc框架做成了一个分布式网盘,这是一个项目,然后muduo库做成集群即时通讯,又用QT做了个交互的客户端,这样又一个项目,然后一个轻量redis,一个CAD,总共四个项目,投了三个月就今天2月份一个小厂Qt offer,然后后面想开了,Qt啥的都能干,这个月get了个北京大厂的offer,做java后端,人生就是这么魔幻,现在就在去北京入职的路上
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务