【滑动窗口+字符计数数组】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;
    }
相关推荐
tHeya06II5 分钟前
涵盖 Cursor、Claude Code、Skills
java·服务器
kim_puppy7 分钟前
TCP的三次握手,四次挥手
java·网络·tcp
诗人不写诗8 分钟前
spring boot apm生态
java·数据库·spring boot
海参崴-8 分钟前
C++代码格式规范
java·前端·c++
怎么没有名字注册了啊14 分钟前
崩溃解决_Qt子窗口关闭按钮后打开崩溃
开发语言·qt
Dxy123931021621 分钟前
JavaScript 如何捕获异常:从基础到进阶的完整指南
开发语言·javascript·udp
better_liang32 分钟前
每日Java面试场景题知识点之-Redisson热门使用场景
java·redis·微服务·分布式锁·redisson·分布式系统
2301_7926748635 分钟前
java学习 day26
java
!停36 分钟前
C++入门—初阶模板
开发语言·c++
so2F32hj236 分钟前
拆解 OpenHands(14)--- Microagents
java·开发语言