力扣-字母异位词

这里我也是没有太懂,只懂个大概,先统计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;
    }
}
相关推荐
wechatbot8886 分钟前
极客互动企业微信 SCRM 自动运营平台效果实测
java·微信·企业微信·rpa
需要82610 分钟前
JVM 内存区域与对象创建:一次 GC 从哪来
java·jvm·spring boot·spring·servlet·tomcat
Zane199427 分钟前
暴力字符串匹配失配就要把文本指针往回拉,KMP凭什么能让它一直往前走
算法
事圆则缓34 分钟前
Java 转 Kotlin 的 Android 迁移路线
java
计算机毕设定制辅导-无忧学长40 分钟前
《基于Vue的流浪动物救助中心管理系统的设计与实现》
java·vue.js·spring boot·流浪动物救助中心管理系统
Mikko743 分钟前
jackson-databind 升到 2.21.6 就安全了吗?jackson-core 是另一个坐标,它那条 high 全局库至今没收
java·后端·安全·json
Java_AI工程师44 分钟前
90%的人写Function Calling,只写了"把参数传给工具执行"这一步,剩下的参数校验、错误重试、超时控制、结果格式化,全是空白。
java·人工智能·程序员
斯维赤1 小时前
LangChain4j 入门教学(Java 后端狂喜版
java·后端
Java_2017_csdn1 小时前
Java 8 Stream API 中的 map 和 flatMap 详解
java
AI深栈1 小时前
第 15 章 · 第一个 AI 工作流:Hello Graph 从 START 跑到 END
java·人工智能