139. Word Break
一、題目
1、審題
2、分析
給出一個(gè)字符串 S,一個(gè)字典表 dict,判斷 S 是否能由 dict 中的字符串所組成,其中 dict 中的字符串能夠多次使用。
?
二、解答
1、思路:
方法一、
使用一個(gè) DP 數(shù)組記錄 S 從下標(biāo) 0 到當(dāng)前下標(biāo)位置是否能夠正確匹配。
①、從下標(biāo) i = 1 開始遍歷,在字典序列 dict 中查找是否能夠正確匹配到S 的下標(biāo) i ;
public boolean wordBreak(String s, List<String> wordDict) {int len = s.length();boolean[] f = new boolean[len+1];f[0] = true; // f[i] = true: 0 ~ i-1 是能匹配的。for(int i = 1; i <= len; i++) {for(String str: wordDict) {if(i - str.length() >= 0 && f[i - str.length()]) {if(s.substring(i - str.length(), i).equals(str)) {f[i] = true;break;}}}}
?
方法二、
使用一個(gè) DP 數(shù)組記錄 S 從下標(biāo) 0 到當(dāng)前下標(biāo)位置是否能夠正確匹配。
public boolean wordBreak11(String s, List<String> wordDict) {int len = s.length();boolean[] f = new boolean[len+1];f[0] = true; // f[i] = true: 0 ~ i-1 是能匹配的。for(int i = 1; i <= len; i++) {for (int j = 0; j < i; j++) {if(f[j] && wordDict.contains(s.substring(j, i))) {f[i] = true;break;}}}return f[len];}
?
方法三、
采用 BFS + DP 。
①、采用一個(gè) DP 數(shù)組記錄到當(dāng)前位置是否能夠正確匹配。
采用一個(gè)Queue 記錄當(dāng)前的廣度遍歷的節(jié)點(diǎn)。
采用一個(gè) Set 存儲(chǔ)字典的所有字符串,方便比較是否包含 S 的子串。
②、可以將查找過程看做一張圖,每次從一個(gè)節(jié)點(diǎn)開始 BFS 查找所有的節(jié)點(diǎn),并填充 DP數(shù)組為 true,同時(shí)將節(jié)點(diǎn)加入 Queue中,繼續(xù)進(jìn)行 BFS 遍歷。
public boolean wordBreak12(String s, List<String> wordDict) {int max_len = -1;for(String word: wordDict) max_len = Math.max(max_len, word.length());Set<String> wordDictSet = new HashSet<>(wordDict);Queue<Integer> queue = new LinkedList<Integer>();boolean[] visited = new boolean[s.length()];queue.add(0);while(!queue.isEmpty()) {int start = queue.remove();for(int end = start + 1; end <= s.length() && end - start <= max_len; end++) {if(wordDictSet.contains(s.substring(start, end)) && !(end < s.length() && visited[end])) {if(end == s.length() ) {return true;}queue.add(end);visited[end] = true;}}}return false;}
?
轉(zhuǎn)載于:https://www.cnblogs.com/skillking/p/9771712.html
總結(jié)
以上是生活随笔為你收集整理的139. Word Break的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: EF Core中关于System.Lin
- 下一篇: Java黄金五年——1~5年一个Java