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);     } }
   |