Hot100--找到字符串中所有字母异位词

题目描述

思路

主要的难点是如何节约时间,采取滑动窗口的思想,有以下需要注意的点:

  1. 根据s和p都只包含小写字母 可以直接采取26长度的数组保存每个字符的数量
  2. 判断截取的字符串是否为p的异位词,直接比较两个数组是否相同(相同说明每个字母对应的总数相同 即为异位词)
  3. 滑动窗口思想在于,窗口长度肯定为p的长度,于是先初始化
  4. 然后每次后移一位,后移一位即第一个字母删除,增加后移一位的字母(这里的体现就是修改数组)
  5. 移动完判断数组是否相同,相同就放入结果集合中
java 复制代码
class Solution {
public List<Integer> findAnagrams(String s, String p) {
        List<Integer>res=new ArrayList<>();
         if(p.length()>s.length()){
            return res;
        }
        int[] pl = new int[26];//存放对照的字符串的每个字母的总数
        int[] sl = new int[26];//长串每次截取的字符串的每个字母总数
        for (int i = 0; i < p.length(); i++) {//初始化
            pl[p.charAt(i) - 'a']++;
            sl[s.charAt(i) - 'a']++;
        }
        if(Arrays.equals(pl,sl)){
            res.add(0);
        }
        for (int i = 0; i < s.length()-p.length(); i++) {
            sl[s.charAt(i) - 'a']--;
            sl[s.charAt(i+p.length()) - 'a']++;//后移的逻辑
            if(Arrays.equals(pl,sl)){//判断是否为异位词
                res.add(i+1);
            }
        }
        return res;
    }
}
相关推荐
学长毕设5 小时前
基于SpringBoot的实验室资产管理系统
java·spring boot·后端
zzu123zsw6 小时前
从臃肿的模板调用到声明式契约:深入 UniHttp 动态代理与多渠道生命周期扩展
java·spring boot·microsoft·unihttp
Yuzhiyuxia6 小时前
【AI Agent面试系列】AI Agent记忆机制知识点1
人工智能·面试·职场和发展
UIU1146 小时前
P1233 [ICPC 2001 Taejon R] 木棍加工
数据结构·c++·算法·动态规划
源码集结号7 小时前
云诊所门诊系统源码,基于SpringBoot+Vue.js架构,支持多租户设计与Docker容器化部署
java·spring boot·源码·医院信息系统·门诊系统·诊所系统
论文复现现场7 小时前
WRF、FEA 能用 L40S 加速吗?求解器检查、断点恢复与长期运行
java·数据库·算法·wrf·有限元分析·gpu计算·断点续算
ZhengEnCi7 小时前
用 AI 写代码为什么拼到最后还是拼人:算力瓶颈与领域专家提示词的本质差异
算法·架构
啃瓜子的松鼠7 小时前
泛微OAe9-后端二开异步调用
java
秋天的怀念_David8 小时前
第二十一夜 · 数字黑洞与西西弗斯的惩罚
java·程序人生·算法
外收内放8 小时前
Python基础语法练习题(73)
java·前端·python