您的位置:首页 > 其它

LeetCode 30. Substring with Concatenation of All Words

2016-04-15 11:09 363 查看

问题

https://leetcode.com/problems/substring-with-concatenation-of-all-words/

解法

经过测试,words中的字符串存在重复的情况。

因此第一步是统计每种字符串个数。

然后在s中进行枚举,比较当前串是否符合。

在枚举s时使用滑动窗口算法。

typedef unordered_map<string, int>::iterator it;
class Solution {
public:
vector<int> findSubstring(string s, vector<string>& words) {
vector<int> ret;
if (words.size() < 1)
return ret;
int wdLen = words[0].size();
if (s.size() <wdLen* words.size())
return ret;
unordered_map<string, int> wdCnt;
for(int i=0; i< words.size(); ++i)
wdCnt[words[i]]++;
for (int i=0; i<wdLen; ++i)
{
int left = i;
unordered_map<string, int> found;
int foundNum = 0;
for(int j = i; j + wdLen<=s.size(); j+= wdLen)
{
string sub = s.substr(j, wdLen);
if(wdCnt.find(sub) == wdCnt.end())
{
found.clear();
foundNum =0;
left = j+wdLen;
}else{
found[sub]++;
foundNum++;
if (found[sub] > wdCnt[sub])
{
while(found[sub] > wdCnt[sub])
{
string ss = s.substr(left, wdLen);
found[ss]--;
foundNum--;
left+= wdLen;
}
}

if (foundNum == words.size())
{
ret.push_back(left);
string ss = s.substr(left, wdLen);
found[ss]--;
foundNum--;
left+=wdLen;
}
}
}
}
return ret;

}
};


实现细节

unordered_map<> clear()

Clear content

All the elements in the unordered_map container are dropped: their destructors are called, and they are removed from the container, leaving it with a size of 0.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode