// 建立 inverted index map
public class SearchService {
HashMap<String, HashSet<String>> strToSet;
public SearchService(Set<String> dict) {
this.strToSet = new HashMap<>();
for (String string : dict) {
// find all combinations of subStrings
for (int i = 0; i < string.length(); i ++) {
for (int j = i + 1; j <= string.length(); j ++) {
String subString = string.substring(i, j);
if (!strToSet.containsKey(subString)) {
HashSet<String> set = new HashSet<>(Arrays.asList(string));
strToSet.put(subString, set);
continue;
}
strToSet.get(subString).add(string);
}
}
}
}
public List<String> search(String str) {
if (!strToSet.containsKey(str)) {
return new ArrayList<String>();
}
List<String> result = new ArrayList<String>(strToSet.get(str));
return result.subList(0, Math.min(result.size(), 4));
}
}