LeetCode Hot100 438 找到字符串中所有字母异位词

原题链接

思路

这题整体比较简单。最容易想到的就是直接暴力算法,时间复杂度为O(N²)。

随后观察后发现,其实可以使用滑动窗口的方式,每次只添加或者只删除一个字母的计数,那么再加上统计所有字母数字的数组,得到的时间复杂度约为O(26N)。

但是注意到题目中似乎并没有限制p的长度一定小于等于s的长度。在数据中似乎也并没有给出反例。或许是要作为一种特殊情况处理。

最开始的时候还把这个s和p的长度搞反了,导致出现一些错误。

代码

cpp 复制代码
class Solution {
public:
    vector<int> findAnagrams(string s, string p) {
        int n1=s.size();
        int n2=p.size();
        vector<int>ans;
        vector<int>cnt1(26,0);
        vector<int>cnt2(26,0);

        if (n1 < n2) return ans;
        for(int i=0;i<n2;i++){
            cnt2[p[i]-'a']++;
        }
        int l=0;
        for(int i=0;i<n1;i++){
            cnt1[s[i]-'a']++;
            if(i-l+1==n2){
                if(cnt1==cnt2){
                    ans.push_back(l);
                }
                cnt1[s[l]-'a']--;
                l++;
            }
        }
        return ans;
    }
};

总结

这题是一个典型的通过滑动窗口就可以解决的问题。但是在具体代码过程中,需要注意s和p的长度,以及窗口具体的移动方式。整体上比较简单,很很快就可以写出来。

相关推荐
垆边人似月.1 小时前
移动长度 k 子串使字符串变成回文
数据结构·算法
David猪大卫1 小时前
【C++修炼】string类:string类的模拟实现
c语言·开发语言·数据结构·c++·经验分享·笔记·学习
pride.li1 小时前
第12章 Python 教程-流程控制:循环结构
linux·服务器·python·算法
海绵宝宝转agent2 小时前
2026-10-16 4算法+1面经
算法
小poop2 小时前
基础排序算法详解——插入、选择与交换排序
算法·排序算法
青蓝智慧马老师2 小时前
想学数据分析但零基础,正确顺序不是先学 Python
大数据·人工智能·算法
jeo陽2 小时前
05-数组与冒泡排序:第一个数据结构与经典算法
c语言·数据结构·算法
WL学习笔记3 小时前
模板初阶(C++)
开发语言·c++·后端·模板初阶
鸽鸽程序猿3 小时前
【刷题册】hot21-25
算法