
438. 找到字符串中所有字母异位词 - 力扣LeetCodeclass Solution { public ListInteger findAnagrams(String s, String p) { int slens.length(); int plenp.length(); if(slenplen){ return new ArrayListInteger(); } ListInteger listnew ArrayList(); int [] scountnew int[26]; int [] pcountnew int[26]; for(int i0;iplen;i){ pcount[p.charAt(i)-a]; //p的窗口的值不变 scount[s.charAt(i)-a]; //s窗口的值可变 } //判断放置处是否有异位词。若相等则表明s的前几位就是p的异位词。起始索引即为0. if(Arrays.equals(pcount,scount)){ list.add(0); } //判断的就是索引为1及以后的啦 for(int i0;islen-plen;i){ // 减去滑动窗口的第0位 scount[s.charAt(i)-a]--; // 加上窗口的第plen位(第3位) scount[s.charAt(iplen)-a]; if(Arrays.equals(pcount,scount)){ list.add(i1); } } return list; } }560. 和为 K 的子数组 - 力扣LeetCode思路核心公式pre[i] - pre[j] k→ 找pre[j] pre[i] - k的次数哈希表作用记录每个前缀和出现的次数避免重复计算初始化map.put(0,1)处理「从数组开头到当前元素」的子数组和 k 的情况时间复杂度 O (n)空间复杂度 O (n)最优解。class Solution { public int subarraySum(int[] nums, int k) { //前缀和 哈希表 int count0; int pre0; // key前缀和value该前缀和出现的次数 MapInteger,Integer mapnew HashMap(); map.put(0, 1);// 初始化前缀和0出现1次处理从第0个元素开始的子数组 for(int i0;inums.length;i){ prenums[i]; //统计每个前缀和 if(map.containsKey(pre-k)){ // 次数累加 countmap.get(pre-k); } // 把当前前缀和存入map次数1如果已存在就取原有值1否则01 map.put(pre,map.getOrDefault(pre,0)1); } return count; } }