【滑动窗口+字符计数数组】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;
    }
相关推荐
YsyaaabB5 分钟前
LangChain作业二---多语言翻译Prompt
开发语言·python·langchain
SunnyDays10117 分钟前
如何在 Java 中实现 OFD 与 PDF 格式互转
java·开发语言
故渊at15 分钟前
第一板块:Android 系统基石与运行原理 | 第三篇:ART 与 Dalvik 运行时环境原理
android·对象模型·内存布局·运行原理·art·dalvik
keykey6.17 分钟前
用 PyTorch 训练图像分类器:完整实战
开发语言·人工智能·深度学习·机器学习
雪度娃娃18 分钟前
转向现代C++——保证const成员函数的线程安全性
开发语言·c++
原来是猿38 分钟前
深入理解 C++ unordered_map 与 unordered_set
开发语言·c++
满天星830357740 分钟前
【Qt】信号和槽 (一)(概述和基本使用)
开发语言·c++·qt
l1t1 小时前
DeepSeek总结的 waddler,一个 Go 语言编写的从 YAML 文件运行的 ETL 管道
开发语言·golang·etl
小江的记录本1 小时前
【Spring全家桶】Spring Cloud 2023.0.x:微服务核心理论、CAP/BASE定理(附《思维导图》+《面试高频考点清单》)
java·spring boot·后端·spring·spring cloud·微服务·面试
Solis程序员1 小时前
缓存三剑客预防策略
java·spring·缓存