zoukankan      html  css  js  c++  java
  • Java实现 LeetCode 140 单词拆分 II(二)

    140. 单词拆分 II

    给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中。返回所有这些可能的句子。

    说明:

    分隔时可以重复使用字典中的单词。
    你可以假设字典中没有重复的单词。
    示例 1:

    输入:
    s = “catsanddog”
    wordDict = [“cat”, “cats”, “and”, “sand”, “dog”]
    输出:
    [
    “cats and dog”,
    “cat sand dog”
    ]
    示例 2:

    输入:
    s = “pineapplepenapple”
    wordDict = [“apple”, “pen”, “applepen”, “pine”, “pineapple”]
    输出:
    [
    “pine apple pen apple”,
    “pineapple pen apple”,
    “pine applepen apple”
    ]
    解释: 注意你可以重复使用字典中的单词。
    示例 3:

    输入:
    s = “catsandog”
    wordDict = [“cats”, “dog”, “sand”, “and”, “cat”]
    输出:
    []

    class Solution {
          private Map<String, List<String>> cache = new HashMap<>();
    
        public List<String> wordBreak(String s, List<String> wordDict) {
            return dfs(s, wordDict,0);
        }
    
    
        private List<String> dfs(String s, List<String> wordDict, int offset){
    
            if (offset == s.length()){
                List<String> res = new ArrayList<>();
                res.add("");
                return res;
            }
            
            if (cache.containsKey(s.substring(offset))){
               return cache.get(s.substring(offset));
            }
    
            List<String> res = new ArrayList<>();
            for (String word : wordDict){
                if (word.equals(s.substring(offset, Math.min(s.length(),offset + word.length())))){
                    List<String> next = dfs(s, wordDict, offset + word.length());
                    for (String str: next){
                        res.add((word + " "+ str).trim());
                    }
                }
            }
    
            cache.put(s.substring(offset),res);
            return res;
        }
    }
    
  • 相关阅读:
    被initramfs的一个要求搞死
    【转】网卡驱动注册到PCI总线这一过程的分析
    PCI总线
    diff和patch使用指南
    Windows 平台下构建Android 开发环境
    linux 如何使用大于2T的块设备
    PCI设备驱动 三
    CFI Flash, JEDEC Flash ,Parellel Flash, SPI Flash, Nand Flash,Nor Flash的区别和联系
    使用initramfs启动Linux成功
    glibc 各个库作用介绍
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13075493.html
Copyright © 2011-2022 走看看