【滑动窗口+字符计数数组】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;
    }
相关推荐
码智社13 小时前
Maven 零基础完整教程
java·开发语言·maven
半夜修仙13 小时前
Spring集成邮箱功能
java·开发语言·spring boot·spring·rabbitmq·github·maven
曾阿伦13 小时前
Maven 构建工程化指南
java·maven
宠友信息13 小时前
从重复请求到订单同步看内容社区源码的处理思路
java·spring boot·redis·后端·mysql·spring
带刺的坐椅13 小时前
用 Solon TeamAgent 落地供应链异常管理与自动补货
java·ai·llm·agent·solon·供应链
潇凝子潇13 小时前
UnsupportedOperationException
java·前端·数据库
码农学院14 小时前
电子产品企业泉州网络推广如何精准触达目标采购商
开发语言·php
qq_337763201914 小时前
国际期货资管系统开发方案|内外盘交易平台源码授权与二次开发支持
java·c语言·开发语言·c++·c#
不定积分要+C_yyy14 小时前
Java关键字final三种用法、核心特性与高频易错点
java·开发语言
xexpertS16 小时前
队列积压治理:如何避免异步系统出现难以恢复的消息积压
java·开发语言