zoukankan      html  css  js  c++  java
  • [Leetcode] Word BreakII

    Question:

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

    ----------------------------------------------

    Solution:

    dfs.

    但是需要注意的是,在dfs之前,需要判断这个string能不能被这个dictionary分割(Word Break)。

     1 public class Solution {
     2     public List<String> wordBreak(String s, Set<String> dict) {
     3         List<String> result=new ArrayList<String>();
     4         if(!wordBreakPossible(s,dict)) return result;
     5         dfs(s,dict,result,"",0);
     6         return result;
     7     }
     8 
     9     private void dfs(String s, Set<String> dict, List<String> result,String temp, int start) {
    10         // TODO Auto-generated method stub
    11         if(start==s.length())
    12             result.add(temp);
    13         else{
    14             if(start!=0)
    15                 temp+=" ";
    16             for(int i=start;i<s.length();i++){
    17                 String word=s.substring(start, i+1);
    18                 if(dict.contains(word))
    19                     dfs(s,dict,result,temp+word,i+1);
    20             }            
    21         }
    22     }
    23 
    24     private boolean wordBreakPossible(String s, Set<String> dict) {
    25         // TODO Auto-generated method stub
    26         boolean[] state=new boolean[s.length()+1];
    27         state[0]=true;
    28         for(int i=1;i<=s.length();i++){
    29             for(int j=i-1;j>=0;j--){
    30                 if(state[j]&&dict.contains(s.substring(j, i))){
    31                     state[i]=true;
    32                     break;
    33                 }
    34                 
    35             }
    36         }
    37         return state[s.length()];
    38     }
    39 }

     ----------------------------------------------------------------------

    20150221:

    又忘了在dfs之前去判断这个string是否可以被这个dictionary分割:

    导致出现了TLE:

    Last executed input: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab", ["a","aa","aaa","aaaa","aaaaa","aaaaaa","aaaaaaa","aaaaaaaa","aaaaaaaaa","aaaaaaaaaa"]
     1 public class Solution {
     2     public List<String> wordBreak(String s, Set<String> dict) {
     3         
     4         List<String> res=new ArrayList<String>();
     5         if(s==null||s.length()==0||dict==null||dict.size()==0)
     6             return res;
     7         if(!wordBreakPossible(s,dict)) return res;
     8         dfs(res,s,dict,"");
     9         return res;
    10     }
    11     public void dfs(List<String> res,String s,Set<String> dict,String temp){
    12         if(s.length()==0){
    13             
    14             res.add(temp.trim());
    15             return;
    16         }
    17         for(int i=1;i<=s.length();++i){
    18             String t=s.substring(0,i);
    19             if(dict.contains(t)){
    20                 dfs(res,s.substring(i),dict,temp+" "+t);
    21             }else{
    22                 continue;
    23             }
    24         }
    25     }
    26     private boolean wordBreakPossible(String s, Set<String> dict) {
    27         // TODO Auto-generated method stub
    28         boolean[] state=new boolean[s.length()+1];
    29         state[0]=true;
    30         for(int i=1;i<=s.length();i++){
    31             for(int j=i-1;j>=0;j--){
    32                 if(state[j]&&dict.contains(s.substring(j, i))){
    33                     state[i]=true;
    34                     break;
    35                 }
    36                 
    37             }
    38         }
    39         return state[s.length()];
    40     }
    41 }
  • 相关阅读:
    bzoj千题计划174:bzoj1800: [Ahoi2009]fly 飞行棋
    bzoj千题计划173:bzoj1257: [CQOI2007]余数之和sum
    bzoj千题计划172:bzoj1192: [HNOI2006]鬼谷子的钱袋
    bzoj千题计划171:bzoj2456: mode
    bzoj千题计划170:bzoj1968: [Ahoi2005]COMMON 约数研究
    bzoj千题计划169:bzoj2463: [中山市选2009]谁能赢呢?
    bzoj千题计划168:bzoj3513: [MUTC2013]idiots
    oracle 11g RAC 的一些基本概念(四)
    fdisk用法(转载)
    Oracle 11g 新特性 -- Oracle Restart 说明(转载)
  • 原文地址:https://www.cnblogs.com/Phoebe815/p/3784035.html
Copyright © 2011-2022 走看看