1. 程式人生 > >【leetcode】140.(Hard)Word Break II

【leetcode】140.(Hard)Word Break II

解題思路:
DP
首先建立一個boolean表用於記錄從字串哪些位置可以是一個word
然後使用DFS來遍歷結果
時間複雜度:O(n^2)
空間複雜度:O(n)


提交程式碼:

class Solution{
public List<String> wordBreak(String s, List<String> wordDict) {
	boolean[] mark=new boolean[s.length()+1];
	mark[s.length()]=true;
	for(int i=s.length()-1;i>=0;i--) {
		for
(int j=i+1;j<=s.length();j++) { String tmp=s.substring(i, j); if(mark[j]&&wordDict.contains(tmp)) { mark[i]=true; break; } } } List<String> res=new ArrayList<>(); List<String> path=new ArrayList<>(); dfs(s,0,wordDict,mark,path,res); return
res; } private void dfs(String s,int p,List<String> wordDict,boolean[] mark, List<String> path,List<String> res) { if(p==s.length()) { StringBuilder str=new StringBuilder(); for(String word: path) { str.append(word); str.append(" "); } str.deleteCharAt(str.length
()-1); res.add(str.toString()); } if(!mark[p]) return; for(int i=p+1;i<=s.length();i++) { String left=s.substring(p, i); if(!wordDict.contains(left)) continue; path.add(left); dfs(s,i,wordDict,mark,path,res); path.remove(path.size()-1); } } }

執行結果:
在這裡插入圖片描述