30 Substring with Concatenation of All Words
链接:https://leetcode.com/tag/hash-table/
问题描述:
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.
For example, given:
s: “barfoothefoobarman”
words: [“foo”, “bar”]
You should return the indices: [0,9].
(order does not matter).
Hide Tags Hash Table Two Pointers String
首先明确题目的输入和要求。words里面的单词长度是一样的。words里面的单词会有重复的。要求在s里面,出现所有words里面的单词,不能有多余的一个字符。找到的两个字符串可以有重叠部分。
class Solution {
public:
vector<int> findSubstring(string s, vector<string>& words)
{
vector<int> result;
int wordlength=words[0].length();
map<string,int> hm;
map<string,int> wordmap;
for(int i=0;i<words.size();i++)
wordmap[words[i]]++;
for(int i=0;i<(int)s.length()-(int)words.size()*wordlength+1;i++)
{
int j=0;
for(;j<words.size();j++)
{
string word=s.substr(i+j*wordlength,wordlength);
if(wordmap.find(word)!=wordmap.end())
hm[word]++;
else
break;
if(hm[word]>wordmap[word])
break;
}
if(j==words.size())
result.push_back(i);
hm.clear();
}
return result;
}
};