一、找到字符串中所有字母异位词
题目:
思路:
用一个变量count来统计有效字符的个数。哈希表2统计字符串p的每个字符出现的个数,然后遍历字符串s,先进窗口,相同的映射位置,哈希表1该位置的个数<=哈希表2的个数,count++(比目标数小才要++,超过了就不需要++,有等号是因为先进窗口)。滑动窗口是固定大小的,所以right-left+1不能大于字符串p的长度。如果超过固定长度,先判断哈希表的位置,哈希表1该位置的个数<=哈希表2的个数,count- -(比目标数大去掉也无效,小于了有效数就减少,等于是因为先判断的,后面要哈希表位置要减减),然后出窗口。判断count等于字符串p的长度,更新结果(大于等于怎么办?不会出现)。
代码:
class Solution {
public:
vector<int> findAnagrams(string s, string p) {
vector<int> ret;
int hash1[26] = {
0 };
int hash2[26] = {
0 };
for (auto e : p) hash2[e - 'a']++;
int left = 0, right = 0, count = 0;
while (right < s.size())
{
hash1[s