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

题目描述

给定两个字符串 s 和 p,找到 s中所有 p的 异位词的子串,返回这些子串的起始索引。不考虑答案输出的顺序。

438. 找到字符串中所有字母异位词 - 力扣(LeetCode)

思路

维护一个定长的滑动窗口,长度为p的长度,在s上滑动,每次判断窗口中的子串是否为p的异位词

注意到对于所有字母异位词,字符串中每个字母出现的频次是相同的。所以使用频率表判断窗口中的子串是否满足要求(也可以使用hashmap)

代码

java 复制代码
class Solution {
    public List<Integer> findAnagrams(String s, String p) {
        int[] sfreq = new int[26];
        int[] pfreq = new int[26];
        List<Integer> ans = new ArrayList<>();
        int l=1,r=p.length();
        if(p.length()>s.length()) return ans;
        for(int i=0;i<p.length();i++){
            sfreq[s.charAt(i)-'a']++;
            pfreq[p.charAt(i)-'a']++;
        }
        if(Arrays.equals(sfreq,pfreq)) ans.add(0);
        while(r<s.length()){
            sfreq[s.charAt(l-1)-'a']--;
            sfreq[s.charAt(r)-'a']++;
            if(Arrays.equals(sfreq,pfreq)){
                ans.add(l);
            }
            l++;
            r++;
        }
        return ans;
    }
}
相关推荐
Omics Pro43 分钟前
Cell封面|衰老生物学开源AI工具包
数据库·人工智能·算法·机器学习·自然语言处理
UIU1143 小时前
递归算法与汉诺塔
c++·学习·算法·c#·递归
用户979984807188 小时前
200 行代码写一个能跑的 AI Agent:不依赖任何框架,只靠 tool-calling 原理
算法
threerocks8 小时前
【Muse实战】X 流量作战室搭建保姆级教程 - 拥有你自己的运营团队
算法
GreenTea8 小时前
深度拆解 ScienceBuddy:如何用“双层递归自进化”构建高可靠科研 Agent Harness
前端·后端·算法
花椒技术9 小时前
2.46 秒生成 5 秒视频:拆解 H3 Max 的模型、推理栈与硬件协同
算法·音视频开发·视频编码
vivo互联网技术9 小时前
ART:妆容迁移框架,重新定义高保真妆容迁移 | ECCV 2026
人工智能·算法·图像识别
用户0441440924499 小时前
卫星信号模拟器里的四个坐标转换公式
算法
橘和柠9 小时前
阿里 open-code-review (AI代码审查工具)实战:安装、四层规则链、自定义规则格式与实测避坑
算法·面试
得物技术9 小时前
别再只卷向量检索了,得物交易搜索如何用“生成式”实现召回范式跃迁?
人工智能·算法·llm