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

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

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".

[解题思路]

1.brute force will TLE.

just check every substring from index 0 to the end.

1 public boolean wordBreak(String s, Set
dict) { 2 // Note: The Solution object is instantiated only once and is reused by each test case. 3 int len = s.length(); 4 boolean flag = false; 5 6 for(int i = 1; i <= len; i++){ 7 String subStr = s.substring(0, i); 8 if(dict.contains(subStr)){ 9 if(subStr.length() == s.length()){10 return true;11 } 12 flag = wordBreak(s.substring(i), dict);13 }14 }15 return flag;16 }

 

2.DP

Reference the dicussion in leetcode.

Here we use seg(i, j) to demonstrate whether substring start from i and length is j is in dict?

base case:

when j = 0; seg(i, j) = false;

State transform equation:

seg(i, j) = true. if s.substring(i, j - 1) is in dict.

else seg(i, j) = seg(i, k) && seg(i + k, j - k);

1 public boolean wordBreak(String s, Set
dict) { 2 // Note: The Solution object is instantiated only once and is reused by each test case. 3 if(s == null || dict.size() <= 0){ 4 return false; 5 } 6 7 int length = s.length(); 8 // seg(i, j) means substring t start from i and length is j can be segmented into 9 // dictionary words10 boolean[][] seg = new boolean[length][length + 1];11 for(int len = 1; len <= length; len++){12 for(int i = 0; i < length; i++){13 String t = s.substring(i, i + len);14 if(dict.contains(t)){15 seg[i][len] = true;16 continue;17 }18 for(int k = 1; k < len; k++){19 if(seg[i][k] && seg[i+k][len-k]){20 seg[i][len] = true;21 break;22 }23 }24 }25 }26 return seg[0][length];27 }

 

这题貌似是一道面试题:

转载地址:http://iqjal.baihongyu.com/

你可能感兴趣的文章
使用 ContentProviderOperation 来提升性能
查看>>
command >/dev/null 2>&1 解说
查看>>
磁盘分区知识总结
查看>>
从尾到头输出链表
查看>>
List
查看>>
android 在新建短信时,加入名称为","(英文逗号)的联系人时,应用崩溃的修改
查看>>
HDU 1232 畅通工程
查看>>
python学习——截图工具编写
查看>>
将Vim改造为强大的IDE—Vim集成Ctags/Taglist/Cscope/Winmanager/NERDTree/OmniCppComplete(有图有真相)(转)...
查看>>
赵又廷解锁全新代言 低调睿智展现绅士质感
查看>>
精读《重新思考 Redux》
查看>>
GitHub Universe 大会总结:信息流推荐开源库,推出社区功能
查看>>
如何构建自定义人脸识别数据集
查看>>
码农,有趣的灵魂...
查看>>
Mac编译Hadoop源码
查看>>
【翻译】深入理解ES6的模块
查看>>
通用对话框QMessageBox
查看>>
JavaScript数组API汇总
查看>>
如何理解Java静态?
查看>>
JDK不同操作系统的FileSystem(unix-like)下篇
查看>>