leetcode 140. 单词拆分 II(记忆化)

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

说明:

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

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

代码

class Solution {Map<Integer,List<List<String>>> listMap=new HashMap<>();public List<String> wordBreak(String s, List<String> wordDict) {Trie trie=new Trie();Set<Integer> set=new HashSet<>();for(String c:wordDict) {set.add(c.length());trie.insert(c);}List<String> ret=new ArrayList<>(); List<List<String>> resss=awordBreak(s,0,trie,set);for(java.util.List<String> list:resss) ret.add(String.join(" ",list));//添加空格return ret;}public List<List<String>> awordBreak(String s, int loc,Trie trie,Set<Integer> set) {if(!listMap.containsKey(loc)){List<List<String>> temp=new LinkedList<List<String>>();if(loc==s.length())temp.add(new ArrayList<>());for(int c:set)//测试字典的所有单词{if(loc+c<=s.length()){String need=s.substring(loc,loc+c);if(trie.search(need)){//该单词合法List<List<String>> nexts=   awordBreak(s,loc+c,trie,set);//递归获取字符串后部分返回的单词序列for(List<String> list:nexts)//将不同的单词序列与当前单词连接{LinkedList<String> next=new LinkedList<>(list);next.offerFirst(need);temp.add(next);}}}}listMap.put(loc,temp);}return listMap.get(loc);}class TrieNode {//字典树private TrieNode[] links;private final int  r=26;private boolean isEnd;public TrieNode() {this.links = new TrieNode[r];}public boolean contains(char c) {return links[c-'a']!=null;}public void put(char c,TrieNode node) {links[c-'a']=node;}public TrieNode get(char c) {return links[c-'a'];}public boolean isEnd() {return isEnd;}public void setEnd() {isEnd = true;}}class  Trie{private TrieNode root;public Trie() {this.root = new TrieNode();}public void insert(String s){TrieNode cur=root;for(int i=0;i<s.length();i++){if(!cur.contains(s.charAt(i))){cur.put(s.charAt(i),new TrieNode());}cur=cur.get(s.charAt(i));}cur.setEnd();}public boolean search(String s){TrieNode cur=root;for(int i=0;i<s.length();i++){if(cur.contains(s.charAt(i))){cur=cur.get(s.charAt(i));}else return false;}return cur.isEnd;}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/392730.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java mvp开发_如何从没有软件开发技能的想法变成现实的市场MVP?️?

java mvp开发by Mike Williams由Mike Williams 如何从没有软件开发技能的想法变成现实的市场MVP&#xff1f;️&#xff1f; (How to go from idea to live marketplace MVP with no software development skills ?️?) Online marketplaces such as Airbnb, Turo, Hipcamp,…

Convolutional neural networks for artistic style transfer

https://harishnarayanan.org/writing/artistic-style-transfer/ 转载于:https://www.cnblogs.com/guochen/p/6888478.html

Centos 安装 禅道

Centos 安装 禅道 一、环境准备&#xff1a; 1、服务器&#xff1a;Centos6.7 新系统 2、查看对应的系统版本&#xff1a;uname -a和cat /etc/redhat CentOS release 6.7 (Final) 二、安装&#xff1a; 1、下载对应系统版本的zbox禅道一键安装包&#xff0c;解压至/opt目录下 …

centos7修改服务器密码忘记,Centos7忘记root密码怎么修改

Centos7忘记root密码怎么修改一、 reboot重启机器&#xff0c;当出现引导界面时&#xff0c;按e进入内核编辑界面。二、 往下翻&#xff0c;到LANGzh_CN.UTF-8后面添加 \rd.break(别忘了空格)三&#xff0c; 修改完成后&#xff0c;按下CtrlX组合键来运行这个修改后的内核程序(…

1.移动端测试知识笔记(面试必备,测试点,adb命令)

移动端测试&#xff1a; 移动应用&#xff0c;特性(功能) 满足 需求(产品文档&#xff0c;隐性需求) 一。App功能测试&#xff1a; 死活背下来1.业务逻辑正确性测试&#xff1a; 产品文档&#xff0c;隐性需求- 写成测试用例 2.兼容性测试&#xff1a; 1.系统版本&#xff1a…

Day 3 网络基础

网络基础 一、什么是互联网协议及为何要有互联网协议 &#xff1f; 互联网协议&#xff1a;指的就是一系列统一的标准&#xff0c;这些标准称之为互联网协议。互联网的本质就是一系列的协议&#xff0c;总称为‘互联网协议’&#xff08;Internet Protocol Suite)。 互联网协议…

leetcode 349. 两个数组的交集

给定两个数组&#xff0c;编写一个函数来计算它们的交集。 示例 1&#xff1a; 输入&#xff1a;nums1 [1,2,2,1], nums2 [2,2] 输出&#xff1a;[2] 示例 2&#xff1a; 输入&#xff1a;nums1 [4,9,5], nums2 [9,4,9,8,4] 输出&#xff1a;[9,4] 代码 class Solution…

a4988 脉宽要求_基于STM32的微型步进电机驱动控制器设计

基于STM32的微型步进电机驱动控制器设计摘 要&#xff1a; 设计了一种微型步进电机驱动控制器&#xff0c;通过上位机界面修改步进电机转速、旋转角度、细分系数。该设计以STM32F103T8U6作为主控制器&#xff0c;以A4988步进电机驱动设备&#xff0c;上位机串口界面作为人机接口…

运行linux的机器死机了_如何在任何机器上轻松运行任何Linux工具

运行linux的机器死机了by Flavio De Stefano由弗拉维奥德斯特凡诺(Flavio De Stefano) 如何在任何机器上轻松运行任何Linux工具 (How to easily run any Linux tool on any machine) Have you ever encountered a situation like the ones below?您是否遇到过以下情况&#x…

【实战】烂泥:一次纠结的系统安装

这应该是昨天的事了&#xff0c;因为昨天太忙了&#xff0c;就没有贴出来&#xff0c;今天下午我想了想还是贴出来吧。一是给自己一个提醒&#xff0c;二是也给坛子里面的午饭们再以后安装系统中提供一种思路。 环境&#xff1a;thinkpad x100e笔记本&#xff0c;2G内存&#x…

Android动态改变TextView字体颜色

Android动态改变TextView字体颜色 分类&#xff1a; Android 2012-06-04 21:56 141人阅读 评论(0) 收藏 举报androidcolorslayout必须在在res/color文件夹下面创建一个selector的xml [html] view plaincopyfont_style_colors.xml <selector xmlns:android"http://…

关于小程序的一些坑的总结

最近开发的小程序&#xff0c;有很多的坑。 1.底部的tabbar 不可更改尺寸和字体的大小。限制的还是蛮死的&#xff01;不知道是不是我没找到方法去修改还是咋的。淡淡的忧桑&#xff5e;&#xff5e;&#xff5e; 2.可以动态的设置小程序的顶部导航栏的字&#xff0c;但是不可…

开源项目贡献者_如何认识您的开源项目贡献者并发展您的社区

开源项目贡献者by David Herron大卫赫伦(David Herron) 如何认识您的开源项目贡献者并发展您的社区 (How to recognize your open source project contributors and grow your community) There’s a truism — if a community is not growing, it is slowly dying. How is yo…

华农java实验7_国家实验教学示范中心

我校有生物学实验教学中心、作物学实验教学中心、水产养殖实验教学中心、动物医学实验教学中心4个国家级实验教学示范中心&#xff0c;10个省级实验教学示范中心。生物学实验教学中心华中农业大学生物学实验教学中心成立于2001年7月&#xff0c;是直属于生命科学技术学院的校级…

jsonpickle数据序列化

json&pickle数据序列化 json 用于字符串和python数据类型间进行转换 pickle 用于python特有的类型 和 python的数据类型间进行转换序列化&#xff1a;把字典或者字符串的内存对象 存到硬盘上&#xff1b; 反序列化&#xff1a;就是从硬盘上加载出来 json序列化与反序列化…

array_walk与array_map的区别

1.array_walk是用于用户自定义的函数&#xff0c;所以想用array_walk($aIds, "trim");去掉数据元素中的空格是达不到目的的只能用array_walk($aIds, create_function(&$val, $val trim($val);)); 2.想完成上边的需求其实更加合适用$aNewIds array_map("t…

shopify二次开发教程_详细教程:如何将Shopify的Storefront API与React和Redux结合使用...

shopify二次开发教程by Chris Frewin克里斯弗里温(Chris Frewin) 详细教程&#xff1a;如何将Shopify的Storefront API与React和Redux结合使用 (A detailed tutorial: how to use Shopify’s Storefront API with React and Redux) 电子商务为所有人&#xff01; (…网站&…

element里面popover里面的高度_五斗柜的高度一般是多少 五斗柜放在什么位置好

五斗柜也就是一种抽屉收纳柜&#xff0c;目前在卧室或是书房等空间均是可以见到。其根据使用用途的不同&#xff0c;进而有着高度和款式&#xff0c;以及摆放位置等等的区别。因此&#xff0c;下面带来五斗柜的高度一般是多少、五斗柜放在什么位置好&#xff0c;以及五斗柜里面…

leetcode 57. 插入区间

给出一个无重叠的 &#xff0c;按照区间起始端点排序的区间列表。 在列表中插入一个新的区间&#xff0c;你需要确保列表中的区间仍然有序且不重叠&#xff08;如果有必要的话&#xff0c;可以合并区间&#xff09;。 示例 1&#xff1a; 输入&#xff1a;intervals [[1,3]…

《C++标准程序库》学习笔记1--第二章第三章

————————— 第二章 —————————1.&#xff08;P11&#xff09; C规定&#xff1a;除了以typename修饰外&#xff0c;template内的任何标志符号都被视为一个值(value)而非一个型别。 eg. template <classT>classMyClass{ typename T::SubType *ptr; };…