php网站开发模板,泰安seo公司,国内外贸网站建设公司,asp 网站运行欢迎跳转我的主页#xff1a;羑悻的小杀马特-CSDN博客 目录#xff1a; 一题目简述#xff1a;
二思路汇总#xff1a;
三解答代码#xff1a; 一题目简述#xff1a; leetcode题目链接#xff1a;. - 力扣#xff08;LeetCode#xff09;
二思路汇总#xff1a; … 欢迎跳转我的主页羑悻的小杀马特-CSDN博客 目录 一·题目简述
二·思路汇总
三·解答代码 一·题目简述 leetcode题目链接. - 力扣LeetCode
二·思路汇总
哈希滑动窗口即窗口里就是固定的lenp;然后比较两个hash表内数据是否完全对着上如果是那么就保存left依次循环进行下去。
这里画图说明一下步骤 这里可以优化一下
比如在建立hash的时候由于这里都是小写字母故可以建立可放26个字母的hash利用映射 还有就是这里字母数量少以及找的只是单个字母如果要是单个字符串那么这样再去遍历比较肯定特别麻烦因此可以考虑在入出窗口的时候就保存count来记录这个窗口内本来有模版hash表内数据的有效字符的个数画图解释一下 这时此题的要点就差不多了。
三·解答代码
class Solution {
public:vectorint findAnagrams(string s, string p) {int ns.size();vectorint v;int hash_p[26]{0};//把p内数据映射入哈希表int hash_s[26]{0};//入到窗口的数据for(auto e:p){hash_p[e-a];}int lenp.size();for(int left0,right0,count0;rightn;right){int ins[right]-a;//入窗口数据int out s[left]-a;//出窗口数据//入窗口hash_s[in];//这里如果后面直接遍历两个hash表比较复杂度比较高故选择开始入数据和出数据都完成记录。if(hash_s[in]hash_p[in]){count;//记录有效字母的个数}//出窗口if(right-left1len){if(hash_s[out]hash_p[out]){count--;}hash_s[out]--;left;1}//出窗口后更新结果if(countlen){v.emplace_back(left);}}return v;}
};