当前位置: 首页> 教育> 就业 > 尚德机构_天空影院手机免费观看在线_什么软件引流客源最快_企业宣传ppt

尚德机构_天空影院手机免费观看在线_什么软件引流客源最快_企业宣传ppt

时间:2025/7/12 0:07:42来源:https://blog.csdn.net/weixin_52151595/article/details/146458974 浏览次数:0次
尚德机构_天空影院手机免费观看在线_什么软件引流客源最快_企业宣传ppt


这道题是定长滑动窗口,之前没做过,看了下灵神的题解,这里讲下详细思路。
这里我们需要用到两个哈希表,hash_p用于统计子串p的字符分布情况,hash_s用于统计滑动窗口内的字符分布情况,当两个哈希表相等时,则此时滑动窗口框住的部分就是p的一个异位词,此时将滑动窗口的左端点下标记录下来即可。当两个哈希表不相等时,则说明当前滑动窗口框住的不是异位词,需要直接将滑动窗口右移,所以我们需要及时将窗口左端的元素移除,在下个循环中,滑动窗口右端会新增一个元素,这样就维持了滑动窗口的长度不变。
这里我依然采用unordered_map作为哈希表的数据结构,注意,当删除窗口左端的元素时,如果窗口左端的元素计数已经降为0,则将对应的键删除,若不及时删除的话,该键依然会存在于哈希表中,但是滑动窗口内已经没有这个字符了,这就会影响两个哈希表之间的相等判断,即使后面的滑动窗口已经框住了异位词,但由于其他字符的键没有删干净,而导致二者不相等,从而漏掉答案。如果是采用array这种容器来实现的话应该不用担心这个问题,我只是觉得用unordered_map更好理解一点。

class Solution {
public:vector<int> findAnagrams(string s, string p) {vector<int> result;unordered_map<char, int> hash_p;  //用于统计字符串p的字符分布情况unordered_map<char, int> hash_s;  //用于统计字符串s的字符分布情况for(int right = 0; right < p.size(); right++)  //统计字符串p的字符分布情况hash_p[p[right]]++;//下面开始在s中查找p的异位词子串for(int right = 0; right < s.size(); right++){hash_s[s[right]]++;   //将右指针指向的字符存入哈希表中int left = right - p.size() + 1;  //确定left的起始位置if(left < 0) //left还没进入字符串pcontinue;//能够执行到这里,就说明左指针和右指针都已经进入了字符串p,可以开始统计了if(hash_p == hash_s)result.emplace_back(left);  //收获结果hash_s[s[left]]--;  //及时清除左指针指向的字符,相当于定长滑动窗口的左端点提前右移一位if(hash_s[s[left]] == 0)   //对于次数已经将为0的字符,需要及时将其键抹除,否则会影响两个哈希表的比较判断hash_s.erase(s[left]);}return result;}
};
关键字:尚德机构_天空影院手机免费观看在线_什么软件引流客源最快_企业宣传ppt

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: