leetcode 139. Word Break
来源:互联网 发布:淘宝开店品牌怎么填 编辑:程序博客网 时间:2024/06/06 05:18
这题目,我用了下回溯,果然超时了。。最近忙实习
等我有空。。我来试一下动态规划
下面是超时代码
public class Solution { public boolean wordBreak(String s, List<String> wordDict) { Set<String> set=new HashSet<>(); for(int i=0;i<wordDict.size();i++){ set.add(wordDict.get(i)); } if(s.length()==0)return true; for(int i=0;i<s.length();i++){ if(set.contains(s.substring(0,i+1))){ String newstring=""; if(i+1<s.length()){ newstring=s.substring(i+1,s.length()); } help(newstring,set); } } return mark; } boolean mark=false; private void help(String s,Set<String> set){ if(s.length()==0){ mark=true; return ; } for(int i=0;i<s.length();i++){ if(set.contains(s.substring(0,i+1))){ String newstring=""; if(i+1<s.length()){ newstring=s.substring(i+1,s.length()); } help(newstring,set); } } }}嗯花了点时间想了下,对代码进行了如下修改。。现在算法复杂度降为O(s.length()*wordDict.size()),但是依然通不过。。
public class Solution { public boolean wordBreak(String s, List<String> wordDict) { Set<String> set=new HashSet<>(); for(int i=0;i<wordDict.size();i++){ set.add(wordDict.get(i)); } if(s.length()==0)return true; LinkedList<String> list=new LinkedList<>(); for(int i=0;i<s.length();i++){ if(set.contains(s.substring(0,i+1))){ list.add(s.substring(0,i+1)); }else { int len=list.size(); for(int j=0;j<len;j++){ String str=list.get(j); if(set.contains(s.substring(str.length(),i+1))){ list.add(s.substring(0,i+1)); } } } } for(int i=0;i<list.size();i++){ if(list.get(i).equals(s))return true; } return false; }}
恩上面这个想法还是有点问题,并不是O(n*m)修改后的accept方法。。
说实话逻辑还是蛮复杂的
public class Solution { public boolean wordBreak(String s, List<String> wordDict) { Set<String> set=new HashSet<>(); for(int i=0;i<wordDict.size();i++){ set.add(wordDict.get(i)); } if(s.length()==0)return true; Set<String> newset=new HashSet<>(); for(int i=0;i<s.length();i++){ if(set.contains(s.substring(0,i+1))){ newset.add(s.substring(0,i+1)); continue; }else { for(int j=0;j<wordDict.size();j++){ if(wordDict.get(j).length()<=i){ String str=s.substring(i-wordDict.get(j).length()+1,i+1); if(set.contains(str)){ if(newset.contains(s.substring(0,i+1-wordDict.get(j).length()))&&!newset.contains(s.substring(0,i+1))) newset.add(s.substring(0,i+1)); } } } } } if(newset.contains(s)){ return true; } return false; }}
0 0
- LeetCode 139. Word Break
- [LeetCode]139.Word Break
- [leetcode] 139.Word Break
- leetcode 139. Word Break
- [LeetCode]139. Word Break
- 139. Word Break LeetCode
- LeetCode-139.Word Break
- LeetCode *** 139. Word Break
- LeetCode 139. Word Break
- LeetCode 139. Word Break
- [leetcode] 139. Word Break
- [leetcode] 139. Word Break
- [LeetCode] 139. Word Break
- [leetcode]139. Word Break
- Leetcode-139. Word Break
- Leetcode-139. Word Break
- Leetcode 139. Word Break
- leetcode 139. Word Break
- 基于STM32L151//STM32F407的矩阵键盘程序(不规则接口):
- Lodash中十个常用的工具函数
- 人工智能商业应用成功的六大必要条件
- HTML5-网页绘画板
- No4.Week 4
- leetcode 139. Word Break
- TextView属性大全及跑马灯效果
- SpringMVC源码-消息转换器HttpMessageConverter
- 设计模式---适配器模式(C++实现)
- 《机器学习实战》第二章:k-近邻算法(1)简单KNN
- 解决android studio引用远程仓库下载慢(JCenter下载慢)
- startActivityForResult用法以及请求码结果码
- leetcode101 Symmetric Tree
- linux下常见的权限问题及验证