【滑动窗口+字符计数数组】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;
    }
相关推荐
想逃离铁厂的老铁2 小时前
Day55 >> 并查集理论基础 + 107、寻找存在的路线
java·服务器
2601_949480062 小时前
【无标题】
开发语言·前端·javascript
stevenzqzq2 小时前
compose 中 align和Arrangement的区别
android·compose
Jack_David2 小时前
Java如何生成Jwt之使用Hutool实现Jwt
java·开发语言·jwt
瑞雪兆丰年兮2 小时前
[从0开始学Java|第六天]Java方法
java·开发语言
u0109272712 小时前
模板编译期排序算法
开发语言·c++·算法
VincentWei952 小时前
Compose:MutableState 和 mutableStateOf
android
一点技术2 小时前
基于SpringBoot的选课调查系统
java·spring boot·后端·选课调查系统
datalover2 小时前
CompletableFuture 使用示例
java·开发语言