博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java for LeetCode 139 Word Break
阅读量:4310 次
发布时间:2019-06-06

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

Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separated sequence of one or more dictionary words.

For example, given

s = "leetcode",
dict = ["leet", "code"].

Return true because "leetcode" can be segmented as "leet code".

解题思路一:

直接暴力枚举会导致TLE,因此,需要记录之前的结果,即可以采用dp的思路,JAVA实现如下:

static public boolean wordBreak(String s, Set
wordDict) { boolean[] dp = new boolean[s.length() + 1]; dp[0] = true; for (int i = 1; i < dp.length; i++) for (int j = i; j >= 0 && !dp[i]; j--) if (wordDict.contains(s.substring(i - j, i))) dp[i] = dp[i - j]; return dp[dp.length - 1]; }

 解题思路二:

考虑到下题用dp做不出来,暴力枚举肯定TLE,所以可以设置一个unmatch集合来存储s中已经确定无法匹配的子串,从而避免重复检查,JAVA实现如下:

static public boolean wordBreak(String s, Set
dict) { return wordBreak(s, dict, new HashSet
()); } static public boolean wordBreak(String s, Set
dict, Set
unmatch) { for (String prefix : dict) { if (s.equals(prefix)) return true; else if (s.startsWith(prefix)) { String suffix = s.substring(prefix.length()); if (!unmatch.contains(suffix)) { if (wordBreak(suffix, dict, unmatch)) return true; else unmatch.add(suffix); } } } return false; }

 

转载于:https://www.cnblogs.com/tonyluis/p/4551146.html

你可能感兴趣的文章
suse如何修改ssh端口为2222?
查看>>
详细理解“>/dev/null 2>&1”
查看>>
suse如何创建定时任务?
查看>>
suse搭建ftp服务器方法
查看>>
centos虚拟机设置共享文件夹并通过我的电脑访问[增加smbd端口修改]
查看>>
文件拷贝(IFileOperation::CopyItem)
查看>>
MapReduce的 Speculative Execution机制
查看>>
大数据学习之路------借助HDP SANDBOX开始学习
查看>>
Hadoop基础学习:基于Hortonworks HDP
查看>>
为什么linux安装程序 都要放到/usr/local目录下
查看>>
Hive安装前扫盲之Derby和Metastore
查看>>
永久修改PATH环境变量的几种办法
查看>>
大数据学习之HDP SANDBOX开始学习
查看>>
Hive Beeline使用
查看>>
Centos6安装图形界面(hdp不需要,hdp直接从github上下载数据即可)
查看>>
CentOS7 中把yum源更换成163源
查看>>
关于yum Error: Cannot retrieve repository metadata (repomd.xml) for repository:xxxxxx.
查看>>
2020-11-18
查看>>
Docker面试题(二)
查看>>
一、redis面试题及答案
查看>>