Word Break 2

Word Break II

문제 내용 및 풀이 방법은

2020.09.29 - [Problem Solving] - 139. Word Break

와 동일하다.

다른 점이 있다면 word break 1번 문제는 Dictionary로 해당 문자를 만들 수 있는가?

이고 word break 2번 문제는 모든 경우의 수를 return 하는 것이 다르다.

    public List<String> wordBreak(String s, List<String> wordDict) {
        return dfs(s, wordDict, new HashMap<>());
    }


    public ArrayList<String> dfs(String s, List<String> wordDict, HashMap<String, ArrayList> dp) {
        ArrayList<String> result = new ArrayList<>();

        if (dp.containsKey(s)) {
            return dp.get(s);
        }

        for (String word : wordDict) {
            if (s.startsWith(word)) {
                if (word.length() == s.length()) {
                    result.add(word);
                } else {
                    ArrayList<String> tmpArr = dfs(s.substring(word.length()), wordDict, dp);

                    if(0 < tmpArr.size()){
                        for(String tmpWord : tmpArr){
                            result.add(word + " " + tmpWord);
                        }
                    }
                }
            }
        }

        dp.put(s, result);

        return result;
    }

Word break에서도 그랬지만 Trie는 불필요 하다.

Time Complexity는 최악의 경우

s가 1 character size로 잘리고 Word dictionary를 모두 Search해야 하는 경우로 계산 해야한다.

["aaa"] ["a","b",,,,"z","aa","ab"....."zzzzz..."]

그래서

$$ O( S Length * dictionary size) $$

이다

728x90
반응형

'Problem Solving' 카테고리의 다른 글

Minimum Window Substring  (0) 2021.05.22
Binary Tree Maximum Path Sum  (0) 2021.05.21
Reverse Nodes in k-Group  (0) 2021.05.18
Alien Dictionary  (0) 2021.05.11
Maximum Profit in Job Scheduling  (0) 2021.05.06