LeetCode - 30. Substring with Concatenation of All Words
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode - 30. Substring with Concatenation of All Words相关的知识,希望对你有一定的参考价值。
30. Substring with Concatenation of All Words
Problem‘s Link
----------------------------------------------------------------------------
Mean:
给你一个字符串s,和一个字符串集合words,找出s中words所有单词连续出现的起始下标.
analyse:
思路:窗口滑动算法.
枚举所有长度为words[0].length()的子串,然后使用窗口滑动算法来统计.
Trick:集合words是一个可重集,当连续出现的单词书大于words中的时,需要回退删除开头部分的单词,注意细节.
Time complexity: O(N)
view code
{
public:
vector<int> findSubstring(string s, vector<string> &words)
{
vector<int> ans;
int n = s.size(), cnt = words.size();
if (n <= 0 || cnt <= 0) return ans;
// init word occurence
unordered_map<string, int> dict;
for (int i = 0; i < cnt; ++i) //统计每个单词出现的次数
dict[words[i]]++;
// travel all sub string combinations
int wl = words[0].size();
for (int i = 0; i < wl; ++i)
{
int left = i, continueWords = 0;
unordered_map<string, int> tdict;
for (int j = i; j <= n - wl; j += wl)
{
string str = s.substr(j, wl);
// a valid word, accumulate results
if (dict.count(str))
{
tdict[str]++;
if (tdict[str] <= dict[str])
continueWords++;
else
{
// a more word, advance the window left side possiablly
while (tdict[str] > dict[str])
{
string str1 = s.substr(left, wl);
tdict[str1]--;
if (tdict[str1] < dict[str1]) continueWords--;
left += wl;
}
}
// come to a result
if (continueWords == cnt)
{
ans.push_back(left);
// advance one word
tdict[s.substr(left, wl)]--;
continueWords--;
left += wl;
}
}
// not a valid word, reset all vars
else
{
tdict.clear();
continueWords = 0;
left = j + wl;
}
}
}
return ans;
}
};
以上是关于LeetCode - 30. Substring with Concatenation of All Words的主要内容,如果未能解决你的问题,请参考以下文章
leetcode 30 Substring with Concatenation of All Words
19.1.30 [LeetCode 30] Substring with Concatenation of All Words
LeetCode(30) Substring with Concatenation of All Words
LeetCode30. Substring with Concatenation of All Words
leetcode 30. Substring with Concatenation of All Words
LeetCode HashTable 30 Substring with Concatenation of All Words