LeetCode 438. 找到字符串中所有字母异位词
思路
利用长度为26的vector数组模拟哈希表。
- step1:将字符串p的每个字符存入哈希表pMap,哈希表的第一个元素表示字母,第二个元素表示该字母在字符串p中出现的次数;
- step2:遍历字符串s,将字符串s中的每个字符存入哈希表sMap,并且利用滑动窗口的思想,窗口大小为字符串p的长度,在哈希表sMap中减去相应字符出现的次数;
- step3:当遍历到某一窗口是满足 sMap == pMap 时,则将窗口左侧索引值存入返回值数值中。
代码
class Solution {
public:
vector<int> findAnagrams(string s, string p) {
vector<int>res;
vector<int>sMap(26, 0);
vector<int>pMap(26, 0);
if(p.size() > s.size()){
return res;
}
for(int i = 0; i < p.size(); i++){
pMap[p[i]-'a']++;
}
int left = 0;
int right = 0;
while(right < s.size()){
sMap[s[right]-'a']++;
if(right >= p.size()){
sMap[s[left]-'a']--;
left++;
}
if(sMap == pMap){
res.push_back(left);
}
right++;
}
return res;
}
};