您现在的位置是:首页 > 编程 > 

14.【滑动窗口】

2025-07-27 19:31:02
14.【滑动窗口】 题目传送门 方法一:滑动窗口算法原理 新建两个哈希表(数组模拟) :通过比较两个哈希表是否一样用来判断是否是异位词 hashS用来统计字符串s的字符出现次数, hashP用来统计字符串p的字符出现次数, 通过滑动窗口 每当right - left + 1 > 字符串p的长度的时候。此时令 left++并让left-‘a’指向的字符出现次数-- 来保证这个窗口大小

14.【滑动窗口】

题目传送门

方法一:滑动窗口算法原理

新建两个哈希表(数组模拟) :通过比较两个哈希表是否一样用来判断是否是异位词 hashS用来统计字符串s的字符出现次数, hashP用来统计字符串p的字符出现次数, 通过滑动窗口 每当right - left + 1 > 字符串p的长度的时候。此时令 left++并让left-‘a’指向的字符出现次数-- 来保证这个窗口大小是 <= 字符串p的长度 每当窗口大小等于字符串p的长度,就比较两个hash数组是否一样。若一样,就添加left下标 到ret顺序表中

代码语言:javascript代码运行次数:0运行复制
class Solution {
    public List<Integer> findAnagrams(String s0, String p0) {
        int[] hashS = new int[26]; //通过比较两个哈希表是否一样用来判断是否是异位词
        int[] hashP = new int[26];
        char[] s = ();//字符串转数组,方便求解
        char[] p = ();
        int m = s0.length(),n = p0.length(); //得到两字符串长度
        List<Integer> ret = new ArrayList<>();

        for (int i = 0; i < n; i++) {   //将p字符串扔进拟哈希表p。等待与拟哈希表s进行比较
            hashP[p[i] - 'a']++;
        }
        for (int left = 0,right = 0; right < m; right++) {
            hashS[s[right] - 'a']++;    //进窗口
            if(right - left + 1 > n){   //如果进多了,那么就出窗口。
                hashS[s[left++]-'a']--;
            }
            if ((hashS, hashP)){ //此时窗口大小一定为p数组长度的大小。
                ret.add(left); //比较两哈希表是否一致,如果一致,就添加初始索引。
            }
        }
        return ret; //最终返回初始索引数组集
    }
}

后面自己写出来的

代码语言:javascript代码运行次数:0运行复制
class Solution {
    public List<Integer> findAnagrams(String s, String p) {
        int[] hashS = new int[26];
        int[] hashP = new int[26];
        List<Integer> ret = new ArrayList<>();
        int m = s.length(),n = p.length();

        for(int i = 0; i < n; i++){
            hashP[(i)-'a']++;
        }

        for(int left = 0,right = 0; right < m; right++){
            hashS[(right) - 'a']++;
            if(right - left + 1 > n){
                hashS[(left++) - 'a']--;
            }
            if((hashS,hashP)){
                ret.add(left);
            }
        }
        return ret;
    }
}

再小小优化一下

代码语言:javascript代码运行次数:0运行复制
class Solution {
    public List<Integer> findAnagrams(String s, String p) {
        int[] hashS = new int[26];
        int[] hashP = new int[26];
        List<Integer> ret = new ArrayList<>();
        int m = s.length(),n = p.length();

        for(int i = 0; i < n; i++){
            hashP[(i)-'a']++;
        }

        for(int left = 0,right = 0; right < m; right++){
            hashS[(right) - 'a']++;
            if(right - left + 1 > n){
                hashS[(left++) - 'a']--;
            }if(right - left + 1 == n && (hashS,hashP)){
                ret.add(left);
            }
        }
        return ret;
    }
}
复杂度分析:

时间复杂度:O(m+n) m和n分别是字符串s和p的长度 空间复杂度:O(m) m是字符串s的长度

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2025-01-19,如有侵权请联系 cloudcommunity@tencent 删除int数组索引统计字符串

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/biancheng/1164454.html

相关标签:无
上传时间: 2025-07-21 00:45:19

上一篇:【栈】

下一篇:string的模拟实现

留言与评论(共有 15 条评论)
本站网友 重庆骑士医院
22分钟前 发表
此时令 left++并让left-‘a’指向的字符出现次数-- 来保证这个窗口大小是 <= 字符串p的长度 每当窗口大小等于字符串p的长度
本站网友 怎样快速去除眼袋
20分钟前 发表
分享自作者个人站点/博客
本站网友 李俊渠
18分钟前 发表
如有侵权请联系 cloudcommunity@tencent 删除前往查看int数组索引统计字符串
本站网友 盘锦生态园
28分钟前 发表
right = 0; right < m; right++){ hashS[(right) - 'a']++; if(right - left + 1 > n){ hashS[(left++) - 'a']--; }if(right - left + 1 == n && (hashS
本站网友 无意苦争春
30分钟前 发表
String p) { int[] hashS = new int[26]; int[] hashP = new int[26]; List<Integer> ret = new ArrayList<>(); int m = s.length()
本站网友 爆震伤
14分钟前 发表
方便求解 char[] p = (); int m = s0.length()
本站网友 小孩为什么吐奶
27分钟前 发表
如有侵权请联系 cloudcommunity@tencent 删除前往查看int数组索引统计字符串
本站网友 机械师笔记本
13分钟前 发表
right = 0; right < m; right++) { hashS[s[right] - 'a']++; //进窗口 if(right - left + 1 > n){ //如果进多了
本站网友 玄参的功效
20分钟前 发表
n = p0.length(); //得到两字符串长度 List<Integer> ret = new ArrayList<>(); for (int i = 0; i < n; i++) { //将p字符串扔进拟哈希表p
本站网友 免费刷ip
12分钟前 发表
hashP用来统计字符串p的字符出现次数
本站网友 和久日本料理
7分钟前 发表
就添加初始索引
本站网友 cookies在哪
24分钟前 发表
14.【滑动窗口】 题目传送门 方法一:滑动窗口算法原理 新建两个哈希表(数组模拟) :通过比较两个哈希表是否一样用来判断是否是异位词 hashS用来统计字符串s的字符出现次数
本站网友 注射botox
21分钟前 发表
通过滑动窗口 每当right - left + 1 > 字符串p的长度的时候
本站网友 白牛
1分钟前 发表
String p0) { int[] hashS = new int[26]; //通过比较两个哈希表是否一样用来判断是否是异位词 int[] hashP = new int[26]; char[] s = ();//字符串转数组