• Java实现 LeetCode 139 单词拆分


    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

    class Solution {
      public boolean wordBreak(String s, List<String> wordDict) {
            Map hasCompute = new HashMap<Integer,Boolean>();
            return wordBreak(s,wordDict,0,hasCompute);
        }
        public boolean wordBreak(String s,List<String> wordDict,int index,Map hasCompute){
            //找到所有可能性
            boolean result = false;
            for(String word:wordDict){
               if(s.startsWith(word,index)){               
                   index+=word.length();
                   //先判断之前是否已经计算过
                   if(hasCompute.containsKey(index)) return false;//如果已经计算过,说明是失败的
                   if(index == s.length()) return true;//递归结束条件
                   if(wordBreak(s,wordDict,index,hasCompute)) return true;//如果找到了,直接返回
                   else{
                       //记录已经计算的字符串
                       if(!hasCompute.containsKey(index)){
                           hasCompute.put(index,false);
                       }
                       //把index还原
                       index-=word.length();  
                    } 
                }
            }
            return result;
        }
    }
    
  • 相关阅读:
    SecureCRT8.3
    firewalld
    yum的repo文件详解、以及epel简介、yum源的更换、常用yum命令
    Softether使用本地网桥
    nginx应用geoip模块,实现不同地区访问不同页面的需求(实践版)
    iOS开发>学无止境
    iOS开发>学无止境
    iOS开发>学无止境
    iOS开发>学无止境
    Objective-C学习- appDelegate 生命周期
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13076139.html
Copyright © 2020-2023  润新知