力扣-字母异位词

这里我也是没有太懂,只懂个大概,先统计p和当前窗口的字符,后主要在窗口大小固定为 p.length(),在 s 上滑动做文章,在s里找到p的长度大小,最后直接比较两个频率数组来判断异位词

定长窗口做法

复制代码
class Solution {
    public List<Integer> findAnagrams(String s, String p) {
        // 存储结果的列表
        List<Integer> ans = new ArrayList<>();
        
        // 创建两个计数器数组,用于统计字符出现频率
        int[] cntP = new int[26]; // 统计字符串 p 的字符频率
        int[] cntS = new int[26]; // 统计 s 的子串的字符频率
        
        // 统计 p 中每个字符的出现次数
        for (char c : p.toCharArray()) {
            cntP[c - 'a']++; // 将字符映射到 0-25 的索引
        }
        
        // 使用滑动窗口遍历字符串 s
        for (int right = 0; right < s.length(); right++) {
            // 将当前字符加入窗口(右边界扩展)
            cntS[s.charAt(right) - 'a']++;
            
            // 计算当前窗口的左边界
            int left = right - p.length() + 1;
            
            // 如果窗口长度不足 p.length(),跳过后续处理
            if (left < 0) {
                continue;
            }
            
            // 检查当前窗口是否是 p 的异位词
            if (Arrays.equals(cntS, cntP)) {
                ans.add(left); // 如果是,记录起始索引
            }
            
            // 将左边界字符移出窗口(为下一次窗口滑动做准备)
            cntS[s.charAt(left) - 'a']--;
        }
        
        return ans;
    }
}
相关推荐
vipxieliang1 分钟前
收货地址验证完整方案:省市区与详细地址
java·spring boot
Json____9 分钟前
java-宿舍安全卫生检查系统项目源码
java·前端·javascript·课程设计·it学习·wwwoop.com
zzzll111123 分钟前
LangChain4j:Java 生态的 AI 应用开发利器
java·开发语言·人工智能
货拉拉技术30 分钟前
Agent 场景下 Token 成本优化的实战技巧
算法
hahaha601639 分钟前
HLS高层次综合设计技巧--循环merge和循环split
人工智能·算法·计算机视觉
JAI科研40 分钟前
Deepseek Agent Harness教程(七) | Deepseek Harness不是一个内核加一堆插件
开发语言·人工智能·深度学习·算法·自然语言处理·transformer·vllm
2601_9673387142 分钟前
尚硅谷2026尚硅谷Java全栈+Python智能体教程
java·人工智能
集思广益的灰太狼1 小时前
变频器启动致PLC数据异常?西门子G120配合滤波器EMC抑制方案
人工智能·算法·工控·emc·电磁兼容·变频器·西门子
用户3126874877201 小时前
HashMap 到底怎么扩容的?源码级链路拆解
java
孙克旭_1 小时前
单链表进阶实操:5 道常考面试题详细解析【Java 实现】
java·开发语言·数据结构·单链表