• 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;
        }
    }
    
  • 相关阅读:
    IIS7配置URL Rewrite链接重写
    wordpress导航菜单的链接支持弹出新页面
    c++绝对是拯救了世界,特别是程序员
    Linux 磁盘坏道检测和修复
    centos里mysql无法用localhost连接的解决方法
    php扩展开发
    IP多播
    因特网的路由选择协议
    ICMP协议
    ARP协议
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13075495.html
Copyright © 2020-2023  润新知