算法(二十)

本文探讨了如何用Java编写两个算法:一是判断一个字符串是否能由给定字典中的单词组成;二是找出所有可能的方法将字符串分割成字典中的单词。通过示例代码详细解释了实现过程。

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值