题目:
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 "barfoor" 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: []
代码:
class Solution {
public:
vector<int> findSubstring(string s, vector<string>& words) {
vector<int> res;
int w_len = words[0].length();
if (w_len > s.length())
return res;
map<string, int> dict;
for (int i = 0; i < words.size(); i++)
dict[words[i]]++;
for (int i = 0; i < (s.length() - w_len + 1); i ++)
{
string cur = s.substr(i, w_len);
if (dict.find(cur) != dict.end())
{
map<string, int> dict_cp = dict;
dict_cp[cur]--;
if (!dict_cp[cur])
dict_cp.erase(cur);
for (int j = i + w_len; j < s.length() - w_len + 1 && dict_cp.size() > 0; j += w_len)
{
cur = s.substr(j, w_len);
if (dict_cp.find(cur) != dict_cp.end())
{
dict_cp[cur]--;
if (dict_cp[cur] == 0)
dict_cp.erase(cur);
}
else
break;
}
if (dict_cp.size() > 0)
continue;
res.push_back(i);
}
}
return res;
}
};