【算法四十五】139. 单词拆分
139. 单词拆分动态规划class Solution { public boolean wordBreak(String s, ListString wordDict) { //子问题:字符串的前 i 个字符能否用字典里的单词拼接 //状态转移方程:dp[i] true if ∃ j ∈ [0, i) , dp[j] true s[j..i-1] ∈ wordDict //dp[i] false //方向:从前到后 int n s.length(); int maxLen 0; for(String word:wordDict){ maxLen Math.max(maxLen,word.length()); } //转化为Set是因为set的contains方法时间复杂度是O(1),List是O(n) SetString wordDicts new HashSet(wordDict); boolean[] dp new boolean[n1]; dp[0] true; //枚举前i个字符 for(int i 1;in;i){ //枚举可划分的下标 for(int j Math.max(0,i-maxLen);ji;j){ if(dp[j] wordDicts.contains(s.substring(j,i))){ dp[i] true; break; } } } return dp[n]; } }时间复杂度O(N*M)N是字符串长度S是最长单词长度空间复杂度O(N)
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2605215.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!