【滑动窗口+字符计数数组】LCR_014_字符串的排列

求解代码

java 复制代码
public boolean checkInclusion(String s1, String s2) {
        if (s1.length() > s2.length()) {
            return false;
        }

        int[] a = new int[26]; // 统计s1的字符出现次数
        int[] b = new int[26]; // 统计s2滑动窗口内的字符出现次数

        for (int i = 0; i < s1.length(); i++) {
            a[s1.charAt(i) - 'a']++; // s1的第i个字符对应数组下标(如'a'→0,'b'→1),计数+1
            b[s2.charAt(i) - 'a']++; // 先统计s2前s1.length()个字符的计数
        }

        //用于比较两个数组的内容是否完全相等
        if (Arrays.equals(a, b)) {
            return true;
        }

        // 初始窗口是[0, s1.length()-1],右边界从s1.length()开始
        int left = 0;
        int right = s1.length();

        while (right < s2.length()) {
            // 右边界字符加入窗口:计数+1
            b[s2.charAt(right) - 'a']++;
            // 左边界字符移出窗口:计数-1
            b[s2.charAt(left) - 'a']--;

            // 检查当前窗口计数是否匹配
            if (Arrays.equals(a, b)) {
                return true;
            }

            // 窗口右移:左、右边界各+1
            right++;
            left++;
        }

        return false;
    }
相关推荐
Escalating_xu43 分钟前
【C++入门基础(下)】默认参数、函数重载、引用、inline 与 nullptr
android·c++·redis
丘山一郎8 小时前
Spring 中的IOC控制反转 和DI依赖注入
java·后端·spring
码视野8 小时前
基于 Spring Boot + Vue3 的【大学英语四六级 (CET-4/6) 作文智能评分与句式润色系统】设计与实现(含PRD/三端高保真源码/大屏)
java·前端·人工智能·spring boot·后端·vue3
MetaLite8 小时前
Spring-AOP自调用为什么失效-AopContext真能解决吗
java·后端·spring
大模型码小白8 小时前
AI 对话流性能调优:万级消息的虚拟滚动落地
java·大数据·前端·javascript·人工智能·算法·机器学习
m0_547486668 小时前
《JavaScript核心原理 》全套PPT课件2026
开发语言·javascript·ecmascript
许彰午9 小时前
14-字段级SM4加密与SM2签名
java·低代码·架构
MC皮蛋侠客9 小时前
Tauri 2.x 系列(五):调用系统 API——官方插件、Rust crate 与原生能力
开发语言·后端·rust
布莱克60510 小时前
软中断和硬中断的区别
开发语言·操作系统
whcyhhh10 小时前
头歌实践教学平台:数据科学与大数据技术导论(十二)
大数据·开发语言·python·数据清洗