1. 题目解析
题目链接:438. 找到字符串中所有字母异位词 - 力扣(Leetcode)
这道题很好理解,就是找出从不同位置开始的所有异位词。
2. 算法原理
那我们该如何快速判断是否是异位词呢?
因为异位词的字符种类和数量是一样的,用哈希表就可以很容易的比较。
思路和代码都还是比较简单的:
我们直接维护一个定长的窗口,
然后通过把字符插入哈希计数,然后每走一步判断是否是异位词即可。
3. 代码编写
class Solution { public: vector<int> findAnagrams(string s, string p) { unordered_map<char, int> win; unordered_map<char, int> cmp; vector<int> ans; for(auto e : p) cmp[e]++; int left = 0, right = 0; while(right < s.size()) { win[s[right++]]++; if(right - left > p.size()) { win[s[left]]--; if(win[s[left]] == 0) win.erase(s[left]); left++; } if(win == cmp) ans.push_back(left); } return ans; } };
写在最后:
以上就是本篇文章的内容了,感谢你的阅读。
如果感到有所收获的话可以给博主点一个赞哦。
如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~