LeetCode 438 找到字符串中所有字母异位词[数组 滑动窗口] HERODING的LeetCode之路
Posted HERODING23
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 438 找到字符串中所有字母异位词[数组 滑动窗口] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。
解题思路:
解决该题最容易理解的方法应该就是滑动窗口了,首先用26位字母固定两个数组,分别统计p的字母个数和s对应长度的字母个数,然后就是s从p的长度开始不断向后添加新的单词并且删除旧的单词,再对比两个数组是否相等,相等就把当前位置放入res数组中,代码如下:
class Solution
public:
vector<int> findAnagrams(string s, string p)
int n1= s.size(), n2 = p.size();
vector<int> res;
if(n1 < n2)
return res;
vector<int> s_count(26);
vector<int> p_count(26);
// 记录p长度的s和p的单词映射关系
for(int i = 0; i < n2; i ++)
++ s_count[s[i] - 'a'];
++ p_count[p[i] - 'a'];
for(int i = 0; i <= n1 - n2; i ++)
if(s_count == p_count)
res.push_back(i);
if(i + n2 < n1)
-- s_count[s[i] - 'a'];
++ s_count[s[i + n2] - 'a'];
return res;
;
以上是关于LeetCode 438 找到字符串中所有字母异位词[数组 滑动窗口] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章
leetcode 438. 找到字符串中所有字母异位词(Find All Anagrams in a String)
LeetCode 438. 找到字符串中所有字母异位词 / 786. 第 K 个最小的素数分数 / 400. 第 N 位数字(优先队列,二分+双指针)