【Java力扣算法】LeetCode 139 单词拆分

题目:

给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。

说明:

  • 拆分时可以重复使用字典中的单词。
  • 你可以假设字典中没有重复的单词。
示例 1:
输入: s = "leetcode", wordDict = ["leet", "code"]
输出: true
解释: 返回 true 因为 "leetcode" 可以被拆分成 "leet code"。

示例 2:
输入: s = "applepenapple", wordDict = ["apple", "pen"]
输出: true
解释: 返回 true 因为 "applepenapple" 可以被拆分成 "apple pen apple"。
     注意你可以重复使用字典中的单词。

示例 3:
输入: s = "catsandog", wordDict = ["cats", "dog", "sand", "and", "cat"]
输出: false

思路:

         先提及几个方法:1、contains()给定值是否存在于该ArrayList中

                                      2、substring()    方法返回字符串的子字符串。在这里就不详细介绍了。

 思路就是新建一个Stringbuilder对象然后依次一个一个把   字符串中的字母存入对象中,然后使用contains方法来检查该字符串在不在给定的列表中。不在返回false,在返回true。

       注意:在这其中我们要考虑其中特殊的两种情况:

                     1、测试使用的是       "aaaaaaa"      ["aaaa","aaa"]这个时会报错,因为 当给对象添加到3个a的时候就会返回   发现已经找到了匹配的字典中的词汇,但是如果3个3个一匹配,那么  最后就会剩下一个a。但是其实使用3个4个这样分组的话就不会出现问题。所以解决办法就是:

           //让当前添加的字符加上后面的字符测试一下   是否是字典中的词汇
           String kl = str.toString() + s.substring(j+1, s.length());
           if(wordDict.contains(kl)){
               right = true;
               break;
           }

               

                     2、测试时是               "goalspecial"                 ["go","goal","goals","special"]     这个时也会报错,因为如果先匹配了go呢么后面  alspecial就没有办法匹配了,而如果是 就长度长的字符串先匹配那么就不会出现这个问题。

        else if(!wordDict.contains(str.toString()) && wordDict.contains(temp.toString())){
               right = true;
               temp = new StringBuilder();
               str = new StringBuilder();
           }

 

 

 代码:

public boolean wordBreak(String s, List<String> wordDict) {
       if(s.length() == 0){
           return false;
       }
       boolean right = false;
       StringBuilder str = new StringBuilder();
       StringBuilder temp = new StringBuilder();
       int j = 0;
       for(char i: s.toCharArray()){
           str.append(i);
           temp.append(i);
           String kl = str.toString() + s.substring(j+1, s.length());
            /*
            "aaaa"。"aaa"
            "aaaaaaa";
            */
           if(wordDict.contains(kl)){
               right = true;
               break;
           }
           /*"goalspecial"
             ["go","goal","goals","special"]
           */
           else if(!wordDict.contains(str.toString()) && wordDict.contains(temp.toString())){
               right = true;
               temp = new StringBuilder();
               str = new StringBuilder();
           }
           else if(wordDict.contains(str.toString())){
               right = true;
               str = new StringBuilder();
           }
           else{
               right = false;
           }
           j++;
       }
       return right;
   }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值