【DP】 wordbreak2 仿照神的代码
来源:互联网 发布:财报数据下载网站 编辑:程序博客网 时间:2024/06/05 18:18
还是看代码有效果,刷LeetCode刷到62了,往前一看发现做过的题都没什么印象。感觉自己到了瓶颈期了,再一味门头刷题已经没有什么进步空间了,因此开始看看别人的代码,所以有了上一篇神代码和渣代码的比较。2是仿照神代码的实现,果然干净整洁了很多。而且一次过所有点。
基本就是在1的基础上做了一个direct指向直接后继节点,然后用dfs遍历一下结果
ArrayList<String> res=new ArrayList<String>();//dirct[i][j]==1 means s[i]can directly goto s[j];//though direct is a large table we only concern about the point from the startint[][] direct;//allow[i] means i can go to the end;boolean[] allow;boolean[] cango;String bases;public ArrayList<String> wordBreak(String s, Set<String> dict) {bases=s;direct=new int[s.length()+1][s.length()+1];//System.out.println(direct.length+" "+direct[0].length);allow=new boolean[s.length()+1];cango=new boolean[s.length()+1];for(int i=0;i<s.length();i++){allow[i]=false;cango[i]=false;}cango[0]=true;//fill the direct by the help of cangofor(int i=0;i<s.length();i++){if(!cango[i])continue;for(String ts:dict){int len=ts.length();if(i+len>bases.length())continue;if(bases.substring(i, i+len).equals(ts)){direct[i][i+len]=1;cango[i+len]=true;if(i+len==s.length())allow[i]=true;}}}//System.out.println("finding finish");//find all allow as a head of a dfs to list all the possible resultfor(int i=0;i<s.length();i++)if(allow[i])genRes(i,bases.substring(i,bases.length()));return res;}private void genRes(int k,String s) {if(k==0){res.add(s);return;}for(int i=0;i<k;i++){if(direct[i][k]==1)genRes(i,bases.substring(i,k)+" "+s);}}
是不是干净整了很多啊 哈哈哈
code rewrite
int len;String ss;Set<String> dictset; HashMap<Integer,ArrayList<String>> mem=new HashMap<Integer,ArrayList<String>>(); public ArrayList<String> dp(int i) {if(mem.get(i)!=null)return mem.get(i);ArrayList<String> returnlist=new ArrayList<String>();if(i==len){returnlist.add("");return returnlist;}String subs=ss.substring(i,len);for(String ts:dictset)if(subs.startsWith(ts)){ArrayList<String> tlist=dp(i+ts.length());for(String tts:tlist){if(tts.length()==0)returnlist.add(ts);elsereturnlist.add(ts+" "+tts.trim());}}mem.put(i, returnlist);return returnlist;} public ArrayList<String> wordBreak(String s, Set<String> dict) { ss = s;dictset = dict;len = s.length();return dp(0); }
0 0
- 【DP】 wordbreak2 仿照神的代码
- LeetCode - WordBreak2
- 仿照 邮箱的免登陆安全提示 javascript代码
- 仿照Sina的导航
- C#写的仿照Windows资源管理器的小程序:File Explorer(含代码)
- C#写的仿照Windows资源管理器的小程序:File Explorer(含代码)
- 仿照QQ的侧边效果,一行代码即可接入侧边栏
- 仿照单子模式的测试
- 仿照QQ的删除效果
- 仿照DatePickerFragment实现的TimePickerFragment
- LeetCode题解——wordBreak2
- 仿照SDK编程写的窗口
- 仿照xp关机退出的效果1
- 玩聚榜单-仿照Technorati的Popular频道
- 玩聚榜单-仿照Technorati的Popular频道
- 玩聚榜单-仿照Technorati的Popular频道
- 玩聚榜单-仿照Technorati的Popular频道
- 玩聚榜单-仿照Technorati的Popular频道
- LeetCode(145)Binary Tree Postorder Traversal
- LeetCode - Merge Sorted Array
- [leet code] Plus One
- HowTo: Use cat Command In Linux / UNIX
- Head First Java_Study Notes_Chapter 5 Extra-Strength Methods
- 【DP】 wordbreak2 仿照神的代码
- 2014年春运大幕明日拉开 客运量达36.23亿人次
- [leet code] Container With Most Water
- C# WinForm开发系列 - ListBox/ListView/Panel
- What is BranchCache?
- Myeclipse 2014JAX-WS Web Services & Clients备忘
- CorePlot绘图:Symbol和标线同时可触控
- LeetCode(110)Balanced Binary Tree
- JS + HTML 5 (Canvas) - 画圆饼动画,也是countdown倒计时的简单实现。