zoukankan      html  css  js  c++  java
  • Word Break II

    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"].

    参考:http://www.tuicool.com/articles/ZVJJRrF

     1 import java.util.ArrayList;
     2 import java.util.LinkedList;
     3 import java.util.List;
     4 import java.util.Set;
     5 
     6 public class Solution {
     7     public List<String> wordBreak(String s, Set<String> dict) {
     8         List<String> dp[] = new ArrayList[s.length() + 1];
     9         dp[0] = new ArrayList<String>();
    10         
    11         for(int i = 0; i < s.length(); i++){
    12             if(dp[i] == null)
    13                 continue;
    14             for(String word : dict){
    15                 int length = word.length();
    16                 int end = i + length;
    17                 if(end > s.length())
    18                     continue;
    19                 if(s.substring(i, end).equals(word)){
    20                     if(dp[end] == null)
    21                         dp[end] = new ArrayList<String>();
    22                     dp[end].add(word);
    23                 }//if
    24             }//for
    25         }//for
    26         List<String> result = new LinkedList<String>();
    27         if(dp[s.length()] == null)
    28             return result;
    29         List<String> temp = new ArrayList<String>();
    30         
    31         dfsStringList(dp, result, s.length(), temp);
    32         
    33         return result;
    34     }
    35     
    36     private void dfsStringList(List<String> dp[], List<String> ans, 
    37             int end, List<String> temp){
    38         if(end <= 0){
    39             String strAns = temp.get(temp.size() - 1);
    40             for(int i = temp.size() - 2; i >= 0; i--)
    41                 strAns += " " + temp.get(i);
    42             ans.add(strAns);
    43             return;
    44         }//if
    45         for(String str : dp[end]){
    46             temp.add(str);
    47             dfsStringList(dp, ans, end - str.length(), temp);
    48             temp.remove(temp.size() - 1);
    49         }
    50     }
    51 }
  • 相关阅读:
    VMware虚拟机安装
    代码搜索的终极武器Ag
    模糊搜索神器fzf
    Python:json、xml、字典各种转换
    03-azkaban安装部署
    linux下环境变量PATH设置错误的补救
    01-编译azkaban
    VMware安装CentOS7
    PS(二)
    等待公交车的时间
  • 原文地址:https://www.cnblogs.com/luckygxf/p/4267965.html
Copyright © 2011-2022 走看看