HashSet(HashMap)
Substring with Concatenation of all words
public List<Integer> findSubstring(String s, String[] words) {
List<Integer> res = new ArrayList<>();
if (s == null || s.length() == 0 || words == null || words.length == 0 || words[0].length() == 0) return res;
Map<String, Integer> wordToCnt = new HashMap<>();
for (String word : words) {
wordToCnt.put(word, wordToCnt.getOrDefault(word, 0) + 1);
}
int N = words.length;
int wordLen = words[0].length();
for (int i = 0; i < s.length() - N * wordLen + 1; i++) {
String sub = s.substring(i, i + N * wordLen);
if (isConcat(sub, wordToCnt, wordLen)) {
res.add(i);
}
}
return res;
}
private boolean isConcat(String str, Map<String, Integer> wordToCnt, int wordLen) {
Map<String, Integer> visitedMap = new HashMap<>();
for (int i = 0; i < str.length(); i += wordLen) {
String word = str.substring(i, i + wordLen);
visitedMap.put(word, visitedMap.getOrDefault(word, 0) + 1);
if (!wordToCnt.containsKey(word) || visitedMap.get(word) > wordToCnt.get(word)) {
return false;
}
}
return true;
}Happy Number
Last updated