标签:cat har fine ring 注意 not inpu turn style
You are given a string, s, and a list of words, words, that are all of the same length. Find all starting indices of substring(s) in s that is a concatenation of each word in words exactly once and without any intervening characters.
Example 1:
Input:
s = "barfoothefoobarman",
words = ["foo","bar"]
Output: [0,9]
Explanation: Substrings starting at index 0 and 9 are "barfoo" and "foobar" respectively.
The output order does not matter, returning [9,0] is fine too.
Example 2:
Input: s = "wordgoodgoodgoodbestword", words = ["word","good","best","word"] Output:[]
public class Solution { public List<Integer> findSubstring(String s, String[] words) { List<Integer> result = new ArrayList<>(); if(s.length() == 0 || words.length == 0) return result; final int wordLength = words[0].length(); final int catLength = wordLength * words.length; if (s.length() < catLength) return result; HashMap<String, Integer> wordCount = new HashMap<>(); for (String word : words) wordCount.put(word, wordCount.getOrDefault(word, 0) + 1); for (int i = 0; i <= s.length() - catLength; ++i) { HashMap<String, Integer> unused = new HashMap<>(wordCount); for (int j = i; j < i + catLength; j += wordLength) { final String key = s.substring(j, j + wordLength); final int pos = unused.getOrDefault(key, -1); if (pos == -1 || pos == 0) break; unused.put(key, pos - 1); if (pos - 1 == 0) unused.remove(key); } if (unused.size() == 0) result.add(i); } return result; } }
注意空s和空words的情况
30. Substring with Concatenation of All Words
标签:cat har fine ring 注意 not inpu turn style
原文地址:https://www.cnblogs.com/wentiliangkaihua/p/11746249.html