leetcodehot100个人题解

找到字符串中的字母异位词

给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。

示例 1:

输入: s = "cbaebabacd", p = "abc"

输出: 0,6

解释:

起始索引等于 0 的子串是 "cba", 它是 "abc" 的异位词。

起始索引等于 6 的子串是 "bac", 它是 "abc" 的异位词。

思路:

利用滑动窗口+词频统计思路

以短串p的长度为窗口在s串上进行滑动,每次统计窗口内的字符出现频率和p的进行比较,如果相同,则加入起始索引

涉及语法和数据结构:

Listres

int\[\] fre

Arrays.equals(A,B)->直接比较两个数组

class Solution {

public List findAnagrams(String s, String p) {

List res=new ArrayList<>();

int n=s.length();

int m=p.length();

if(n<m)return res;

int\[\] sfre=new int26;

int\[\] pfre=new int26;

for(int i=0;i<m;i++){

sfres.charAt(i)-'a'++;

pfrep.charAt(i)-'a'++;

}

if(Arrays.equals(sfre,pfre)){

res.add(0);

}

for(int i=m;i<n;i++){

sfres.charAt(i)-'a'++;

sfres.charAt(i-m)-'a'--;

if(Arrays.equals(sfre,pfre)){

res.add(i-m+1);

}

}

return res;

}

}

和为K的子数组个数

给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。

子数组是数组中元素的连续非空序列。

示例 1:

**输入:**nums = 1,1,1, k = 2

**输出:**2

思路:前缀和+HashMap哈希表

前缀和-k如果存在于HashMap中,则将前缀和-k对应出现次数加到计数器里

语法:presummap.getOrDefault(sum,0)

如果sum这个key对应value有值则取对应值,如果没有则取默认值,这里设置为0

  1. 我们准备一个哈希表 (Map),用来记录**"某个前缀和出现的次数"**。

  2. 初始化哈希表:map.put(0, 1)。意思是"前缀和为 0 的情况出现过 1 次"(即还没开始遍历,总和为 0)。

  3. 初始化当前前缀和 sum = 0,结果计数 count = 0。

  4. 遍历数组,把当前元素累加到 sum 中。

  5. 看看哈希表里有没有 sum - k:

    • 如果有,说明我们找到了之前的某个历史前缀和,从那个位置到当前位置的子数组和就是 k。把对应的次数累加到 count 中。
  6. 把当前的 sum 存入哈希表(如果已经存在,就把次数 +1)。

  7. 遍历结束,返回 count。

class Solution {

public int subarraySum(int\[\] nums, int k) {

Map<Integer,Integer> presummap=new HashMap<>();

presummap.put(0,1);

int count=0;

int sum=0;

for(int num:nums){

sum+=num;

if(presummap.containsKey(sum-k)){

count+=presummap.get(sum-k);

}

presummap.put(sum,presummap.getOrDefault(sum,0)+1);

}

return count;

}

}

相关推荐
sunburn-1 小时前
数据库增删改查:从 SQL 基础到实践要点
java·数据库·mysql
ZhengEnCi1 小时前
内存装不下怎么取 Top 100:外部排序与分布式 Top-K 的实测取舍
分布式·算法·排序算法
郭小李1 小时前
spring @RequestMapping注解
java·后端·spring
拓恒技术10 小时前
无人机巡检AI算法的工程化落地:从需求到交付的5个核心环节
人工智能·算法·无人机
晨曦中的暮雨10 小时前
限流算法——固定窗口、滑动窗口、漏桶、令牌桶
java·开发语言·算法
怕浪猫10 小时前
Claude Code vs Codex:Computer Use 实现原理深度拆解
算法·面试·github
学长毕设11 小时前
基于SpringBoot的青少年编程学习平台系统-附源码
spring boot·学习·青少年编程
文丑颜不良啊11 小时前
LeetCode876~900题目解析
java·leetcode
罗西的思考12 小时前
AI 时代的 “房谋杜断”:如何培养能力、品味与判断力
人工智能·算法·机器学习