【滑动窗口+字符计数数组】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;
    }
相关推荐
吃饱了得干活23 分钟前
Spring Cloud Gateway 微服务网关:路由、断言、过滤器
java·spring cloud
李斯维2 小时前
从历史的角度看 Android 软件架构
android·架构·android jetpack
lwx572802 小时前
探秘InnoDB:搞懂它的内存、线程、磁盘与日志刷盘策略
java·后端
Flynt3 小时前
从Spring Boot 4.0升到4.1,我在Maven和gRPC上栽了跟头
java·spring boot·后端
plainGeekDev4 小时前
Activity 间传值 → Navigation 参数
android·java·kotlin
用户41659673693554 小时前
Android WebView 加载 file:// 离线页面调试教程
android·前端
plainGeekDev5 小时前
onActivityResult → ActivityResult API
android·java·kotlin
Sunia5 小时前
《AgentX 专栏》10-生产部署:3台2C4G云服务器把企业级Agent真正跑起来的完整方案
java·架构
ZhengEnCi6 小时前
J7A-高级Java工程师面试三道灵魂拷问-深度广度与工程素养的终极检验
java·后端
随遇丿而安9 小时前
第10周:Activity 基础功能与生命周期优化
android