139單詞拆分

題目

https://leetcode-cn.com/problems/word-break/數組

分析

1. 字符串S = {s1,s2,s3,s4...sn}app

  字典set = {S1,S2,S3....Sn}spa

2.  子問題劃分code

  S = S1 + S2 blog

    S1 = S11 +S12leetcode

    S2 = S21 + S22字符串

  若是S1被包含在字典中,而且S2也被包含在字典中,則S是可拆分的get

3.  邊界string

  S1 == S 也就是說 S2 = NULLclass

 

4.  程序:

  設置一個Boolean數組,存儲第i個字母開頭的字符串是不是可拆分的

  例:「appledog」   {"app","apple","dog"}

  

    public boolean helper(String s,Set<String> set,int start,Boolean[] mem){
        if(start == s.length()){
            return true;
        }
        if(mem[start] != null){
            return mem[start];
        }
        for(int end = start + 1; end <= s.length(); end++){
            if(set.contains(s.substring(start,end)) && helper(s,set,end,mem)){
                mem[start] = true;
                return true;
            }
        }
        mem[start] = false;
        return false;

    }
    public boolean wordBreak(String s, List<String> wordDict) {
        Set<String> set = new HashSet<String>(wordDict);
        Boolean[] mem = new Boolean[s.length()];
        return helper(s,set,0,mem);
    }
相關文章
相關標籤/搜索