首页 > 编程语言 >#yyds干货盘点# LeetCode程序员面试金典:单词拆分 II

#yyds干货盘点# LeetCode程序员面试金典:单词拆分 II

时间:2023-06-24 18:31:34浏览次数:30  
标签:yyds wordBreaks map index List II 金典 wordDict new

题目:

给定一个字符串 s 和一个字符串字典 wordDict ,在字符串 s 中增加空格来构建一个句子,使得句子中所有的单词都在词典中。以任意顺序 返回所有这些可能的句子。

注意:词典中的同一个单词可能在分段中被重复使用多次。

 

示例 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 {
    public List<String> wordBreak(String s, List<String> wordDict) {
        Map<Integer, List<List<String>>> map = new HashMap<Integer, List<List<String>>>();
        List<List<String>> wordBreaks = backtrack(s, s.length(), new HashSet<String>(wordDict), 0, map);
        List<String> breakList = new LinkedList<String>();
        for (List<String> wordBreak : wordBreaks) {
            breakList.add(String.join(" ", wordBreak));
        }
        return breakList;
    }

    public List<List<String>> backtrack(String s, int length, Set<String> wordSet, int index, Map<Integer, List<List<String>>> map) {
        if (!map.containsKey(index)) {
            List<List<String>> wordBreaks = new LinkedList<List<String>>();
            if (index == length) {
                wordBreaks.add(new LinkedList<String>());
            }
            for (int i = index + 1; i <= length; i++) {
                String word = s.substring(index, i);
                if (wordSet.contains(word)) {
                    List<List<String>> nextWordBreaks = backtrack(s, length, wordSet, i, map);
                    for (List<String> nextWordBreak : nextWordBreaks) {
                        LinkedList<String> wordBreak = new LinkedList<String>(nextWordBreak);
                        wordBreak.offerFirst(word);
                        wordBreaks.add(wordBreak);
                    }
                }
            }
            map.put(index, wordBreaks);
        }
        return map.get(index);
    }
}

标签:yyds,wordBreaks,map,index,List,II,金典,wordDict,new
From: https://blog.51cto.com/u_13321676/6541478

相关文章

  • 31 IIC(九)iic adapter
    代码1iicadapter驱动架构i2cadapter设备是挂载于platformbus整体重点架构如下分配structi2c_adapter*adap=kzalloc(sizeof(structi2c_adapter),GFP_KERNEL);设置adapter->owner=THIS_MODULE;adapter->algo=&i2c_algo;注册ret=i2c_add_adapter(a......
  • leetcode 113 路径总和2 path-sum-ii【ct】
    ===思路:很简单,记得递归的时候传入path.slice ......
  • ASCII 表具体字符范围以及控制字符范围
    ASCII(发音:,AmericanStandardCodeforInformationInterchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统。它主要用于显示现代英语,而其扩展版本延伸美国标准信息交换码则可以部分支持其他西欧语言,并等同于国际标准ISO/IEC646。ASCII由电报码发展而来。第一版标准......
  • #yyds干货盘点# LeetCode程序员面试金典:复制带随机指针的链表
    题目:给你一个长度为n的链表,每个节点包含一个额外增加的随机指针random,该指针可以指向链表中的任何节点或空节点。构造这个链表的 深拷贝。 深拷贝应该正好由n个全新节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的next指针和random指针也都应指向复制......
  • #yyds干货盘点# LeetCode程序员面试金典:最短回文串
    1.简述:给定一个字符串s,你可以通过在字符串前面添加字符将其转换为回文串。找到并返回可以用这种方式转换的最短回文串。 示例1:输入:s="aacecaaa"输出:"aaacecaaa"示例2:输入:s="abcd"输出:"dcbabcd"2.代码实现:classSolution{publicStringshortestPalindrome(Strings)......
  • 代码随想录Day32|贪心II
     今日任务●  122.买卖股票的最佳时机II ●  55. 跳跃游戏 ●  45.跳跃游戏II ●  1005.K次取反后最大化的数组和 ●  134. 加油站●  135. 分发糖果 122.买卖股票的最佳时机IIclassSolution:defmaxProfit(self,prices:List[int]......
  • 代码随想录算法训练营第43天 | ● 1049. 最后一块石头的重量 II ● 494. 目标和
     第九章 动态规划 part05●  1049. 最后一块石头的重量 II ●  494. 目标和 ●  474.一和零    详细布置   1049. 最后一块石头的重量 II  本题就和 昨天的 416. 分割等和子集 很像了,可以尝试先自己思考做一做。 视频讲解:https://www......
  • 三菱FX2N对台达变频器的ASCII的通信控制程序资料PLC采用FX2N,加FX3G-485BD扩展模块,采
    三菱FX2N对台达变频器的ASCII的通信控制程序资料PLC采用FX2N,加FX3G-485BD扩展模块,采用MODBUSASCII控制方式,可以通过PLC实现对变频器的正反转,启动停止的控制,频率的设定,加减速,以及对输出频率的监控。已实测,效果如视频,FX3U可以一样用,别的变频器支持ASCII通讯也可以用,资料包括触摸屏......
  • FPGA sataII sataIII 固态存储 文件系统FPGA sata2 sata3 固态存储
    FPGAsataIIsataIII固态存储文件系统FPGAsata2sata3固态存储1.支持xilinx全系列FPGA器件2.提供文件系统3.提供硬件解决方案4.移植方便,相当于操作fifo接口就可以了,根据记录行程文件ID:5510000598067161402......
  • Windows 2008服务器多界面和IIS的安装教程 140.210.16.x
    当你在使用服务器时是否有遇到这样一个问题?当你正在服务器里进行工作时,突然一个小伙伴在没有告知你的情况下进入了服务器里,导致你服务器失去连接了,这种情况是非常常见的现象。主要原因就是因为服务器没有安装多界面,服务器多开界面是占用的同一台服务器的资源,服务器多开数量没有限制......