方法1:
使用unordered_map
class Solution {
public:
bool valid(string s,int sta,vector<string>& words,unordered_map<string,int>& mp,vector<int>& vt,int m)
{
int n=words[0].size();
vector<int> num(vt.begin(),vt.end());
int i,len=s.size();
int cnt=0;
for(i=sta;i<=len-n&&cnt<m;i+=n)
{
string tmp=s.substr(i,n);
if(mp.find(tmp)==mp.end()||num[mp[tmp]]<=0)
return false;
num[mp[tmp]]--;
cnt++;
}
if(cnt==m)
return true;
return false;
}
vector<int> findSubstring(string s, vector<string>& words) {
unordered_map<string,int> mp;
vector<int> ans;
int n=words.size();
int len=s.size();
vector<int> num(n,0);
if(n==0)
return ans;
int m=words[0].size();
int i;
for(i=0;i<n;i++)
{
if(mp.find(words[i])==mp.end())
{
mp[words[i]]=i;
num[i]=1;
}
else
num[mp[words[i]]]++;
}
for(i=0;i<=len-n*m;i++)
{
if(valid(s,i,words,mp,num,n))
ans.push_back(i);
}
return ans;
}
};
本文介绍了一种使用哈希表(unordered_map)实现的高效子串查找算法,该算法能够找出字符串中所有符合特定单词列表的起始位置。通过将单词列表预处理成哈希表并结合滑动窗口的方法,实现了快速匹配。
757

被折叠的 条评论
为什么被折叠?



