博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【leetcode】Word Break II
阅读量:4986 次
发布时间:2019-06-12

本文共 1760 字,大约阅读时间需要 5 分钟。

Given a string s and a dictionary of words dict, add spaces in s to construct a sentence where each word is a valid dictionary word.

Return all such possible sentences.

For example, given

s = "catsanddog",
dict = ["cat", "cats", "and", "sand", "dog"].

A solution is ["cats and dog", "cat sand dog"].


 

题解:开始想利用Word Break I的代码(详细请见),先把dp的表打出来,然后DFS搜索出字符串,后来发现这样会TLE。看了九章的题解,才有了如下思路:

递归的思想,利用一个map——Map<String, ArrayList<String>> map存放单词s和它对应的拆分字符串的列表。比如题目中的例子catsanddog在map中的对应的list就有两个元素"cats and dog"和"cat sand dog"。

因为每个字符串s如果有划分,那么一定从第一个字符开始,所以,递归每次从索引0开始,找到dict中包含的s的前缀,然后递归的探求s除去这个前缀后剩下的字符串可以被拆分成的方式,如果剩下的字符串可以被拆分,那么前缀加上剩下字符串拆分得到的结果就是最终s的拆分结果了。

还是以题目中的例子来说"catsanddog"

首先发现dict中含有前缀cat,这时递归的去找"sanddog"的拆分方式,发现可以拆分为”sand dog",最终得到s的一种拆分方式"cat sand dog";

继续循环,发现dict中含有前缀"cats",这时递归的去找"anddog"的拆分方式,发现可以拆分为"and dog",最终得到s的第二种拆分方式"cats and dog"。

代码如下:

1 public class Solution { 2     public List
wordBreak(String s, Set
dict) { 3 Map
> map = new HashMap
>(); 4 return findList(s, dict, map); 5 } 6 private List
findList(String s,Set
dict,Map
> map){ 7 if(map.containsKey(s)) return map.get(s); 8 ArrayList
answerList = new ArrayList
(); 9 int length = s.length();10 if(length <= 0)11 return answerList;12 13 for(int i = 1;i <= length;i++){14 String prefix = s.substring(0,i);15 if(dict.contains(prefix)){16 if(i == length)17 answerList.add(prefix);18 else{ 19 List
temp = findList(s.substring(i), dict, map);20 for(String tmp:temp){21 tmp = prefix + " " + tmp;22 answerList.add(tmp);23 }24 }25 }26 }27 map.put(s, answerList);28 return answerList;29 }30 }

转载于:https://www.cnblogs.com/sunshineatnoon/p/3849413.html

你可能感兴趣的文章
Avi视频生成缩略图时,提示“尝试读取或写入受保护的内存。这通常指示其他内存已损坏”...
查看>>
命令行执行python模块时提示ImportError: No module named xxx
查看>>
WPF界面假死
查看>>
asp.net mvc 2.o 中使用JQuery.uploadify
查看>>
C#学习笔记2
查看>>
Java 面向对象 之 super 关键字
查看>>
Java 设计模式 之 观察者模式
查看>>
Failed to load JavaHL Library.
查看>>
HTML5的本地存储
查看>>
输入框实时模糊匹配输入
查看>>
Python3入门(四)——Python函数
查看>>
WPF中,使用ICollectionView进行排序时,汉字排序出现问题的解决
查看>>
YARN的设计
查看>>
移动终端网页游戏移植研发框架【客户端战斗系统】
查看>>
查找算法之二分查找
查看>>
ionic的开发打包自己APP的步骤
查看>>
Xcode插件VVDocumenter Alcatraz KSImageNamed等安装
查看>>
C#面向对象设计模式纵横谈课堂笔记
查看>>
Mysql 用命令行导出导入数据方法
查看>>
redis操作
查看>>