1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| package com.demo.s140;
import java.util.*;
public class Solution { public List<String> wordBreak(String s, List<String> wordDict) { Map<Integer, List<List<String>>> map = new HashMap<Integer, List<List<String>>>(); List<List<String>> wordBreaks = backtrack(s, s.length(), new HashSet<String>(wordDict), 0, map); List<String> breakList = new LinkedList<String>(); for (List<String> wordBreak : wordBreaks) { breakList.add(String.join(" ", wordBreak)); } return breakList; }
public List<List<String>> backtrack(String s, int length, Set<String> wordSet, int index, Map<Integer, List<List<String>>> map) { if (!map.containsKey(index)) { List<List<String>> wordBreaks = new LinkedList<List<String>>(); if (index == length) { wordBreaks.add(new LinkedList<String>()); } for (int i = index + 1; i <= length; i++) { String word = s.substring(index, i); if (wordSet.contains(word)) { List<List<String>> nextWordBreaks = backtrack(s, length, wordSet, i, map); for (List<String> nextWordBreak : nextWordBreaks) { LinkedList<String> wordBreak = new LinkedList<String>(nextWordBreak); wordBreak.offerFirst(word); wordBreaks.add(wordBreak); } } } map.put(index, wordBreaks); } return map.get(index); } }
|