Word Break II

来源:互联网 发布:中国野生蜘蛛网络图鉴 编辑:程序博客网 时间:2024/05/21 10:31

Given a string s and a dictionary of words dict, add spaces in s to construct a sentence 

where each word is a valid dictionary word.

Return all such possible sentences.

For example, given s = "catsanddog", dict = ["cat", "cats", "and", "sand", "dog"].

A solution is ["cats and dog", "cat sand dog"].

这个题目和上一个很相似,但改成用List数组words保存符合的单词。如下图,再用深搜

的方法得到所有可能的组合。


public class Solution {    public List<String> wordBreak(String s, Set<String> wordDict) {        List<String>[] words=new ArrayList[s.length()+1];        words[0]=new ArrayList<String>();        for(int i=0;i<s.length();i++){            if(words[i]==null)continue;            for(String str:wordDict){                int len=str.length();                int start=i+len;                if(start>s.length())continue;                if(s.substring(i,start).equals(str)){                    if(words[start]==null)                        words[start]=new ArrayList<String>();                    words[start].add(str);                }            }        }        List<String> result=new LinkedList<String>();        if(words[s.length()]==null)            return result;        List<String> tmp=new ArrayList<String>();        dfs(words,s.length(),result,tmp);        return result;    }    private void dfs(List<String>[] words,int end,List<String> result,List<String> tmp){        if(end<=0){            String path=tmp.get(tmp.size()-1);            for(int i=tmp.size()-2;i>=0;i--)                path+=" "+tmp.get(i);            result.add(path);        }        for(String str:words[end]){            tmp.add(str);            dfs(words,end-str.length(),result,tmp);            tmp.remove(tmp.size()-1);        }    }}



0 0
原创粉丝点击