【Hot100】LeetCode—438. 找到字符串中所有字母异位词

news2024/11/15 9:42:06

目录

  • 1- 思路
    • 哈希表 + 滑动窗口
  • 2- 实现
    • ⭐438. 找到字符串中所有字母异位词——题解思路
  • 3- ACM 实现


  • 原题链接:438. 找到字符串中所有字母异位词

1- 思路

哈希表 + 滑动窗口

思路

  • 哈希表:通过数组维护一个哈希表
  • 滑动窗口:通过控制数组的下标,来实现滑动窗口

image.png


2- 实现

⭐438. 找到字符串中所有字母异位词——题解思路

在这里插入图片描述

class Solution {
    public List<Integer> findAnagrams(String s, String p) {
        //1. 数据结构
        List<Integer> res = new ArrayList<>();
        int[] sHash = new int[26];
        int[] pHash = new int[26];
        int sLen = s.length();
        int pLen = p.length();

        if(sLen<pLen){
            return res;
        }

        // 2.首次遍历
        for(int i = 0 ; i < pLen;i++){
            sHash[s.charAt(i)-'a']++;
            pHash[p.charAt(i)-'a']++;
        }
        if(Arrays.equals(sHash,pHash)){
            res.add(0);
        }

        // 3.循环遍历
        for(int i = 0; i <sLen-pLen;i++){
            // 3.1左侧维护
            sHash[s.charAt(i)-'a']--;
            sHash[s.charAt(pLen+i)-'a']++;
            if(Arrays.equals(sHash,pHash)){
                res.add(i+1);
            }
        }
        return res;
    }
}

3- ACM 实现

public class findAnagrams {

    public static List<Integer> findA(String s,String p){
        //1. 数据结构
        List<Integer> res = new ArrayList<>();
        int[] sCount = new int[26];
        int[] pCount = new int[26];
        int sLen = s.length();
        int pLen = p.length();

        if(sLen<pLen){
            return res;
        }
        // 2.首次遍历
        for(int i = 0 ; i < pLen;i++){
            sCount[s.charAt(i)-'a']++;
            pCount[p.charAt(i)-'a']++;
        }
        if(Arrays.equals(sCount,pCount)){
            res.add(0);
        }

        // 3.再次遍历
        for(int i =0;i<sLen-pLen;i++){
            sCount[s.charAt(i)-'a']--;
            sCount[s.charAt(i+pLen)-'a']++;
            if(Arrays.equals(sCount,pCount)){
                res.add(i+1);
            }
        }
        return res;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("输入字符串1");
        String str1 = sc.nextLine();
        System.out.println("输入字符串2");
        String str2 = sc.nextLine();

        System.out.println("结果是"+findA(str1,str2));
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2033212.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

为何说本届巴黎奥运会中国金牌榜应排列第一?

为何说本届巴黎奥运会中国金牌榜应排列第一&#xff1f; 在奥运会上&#xff0c;金牌榜的排名一直是各国关注的焦点。然而&#xff0c;在历届奥运会中&#xff0c;关于金牌榜的统计方法和排名标准却存在一定的争议。尤其在中美两国之间&#xff0c;金牌榜的排名往往成为双方媒体…

制作好的excel报表设置打开密码或忘记密码怎么办?

excel工作表经常用来做数据统计、工资、报表等的文件格式&#xff0c;这些类型的文件都是很重要的数据资料&#xff0c;为此做这些数据的朋友们都会给他设置一个打开密码&#xff0c;不让其他人随便打开。但随着时间的流逝&#xff0c;我们做的数据报表越来越多了&#xff0c;做…

transformer(李宏毅老师系列)

自学参考&#xff1a; Transformer:Attention Is All You Need Transformer论文逐段精读 视频课 课件资料 笔记 一、引入 seq2seq&#xff1a;输入一个序列的向量作为input&#xff0c;output的长度由机器自己决定seq2seq model应用: 语音辨识 输入是声音讯号的一串vector 输出…

提高清晰度的全彩LED显示屏的关键要素

全彩LED显示屏作为现代广告宣传和信息传播的主要媒介&#xff0c;其清晰度在很大程度上决定了观众的视觉体验和信息传达的效果。随着人们对高清显示需求的不断提升&#xff0c;全彩LED显示屏也在向更高清、更细腻的显示效果迈进。那么&#xff0c;如何进一步提升全彩LED显示屏的…

6数字基石:掌握计算机语言、多媒体与系统工程

计算机语言 计算机语言是指用于人与计算机之间交流的一种语言&#xff0c;是人与计算机之间传递信息的媒介。计算机语言主要由一套指令组成&#xff0c;而这一种指令一般包括表达式、流程控制和集合三大部分内容。 表达式又包含变量、常量、字面量和运算符。 流程控制有分支…

善用 AI ,优化项目,保姆级简历写作指南第七弹

大家好&#xff0c;我是程序员鱼皮。做知识分享这些年来&#xff0c;我看过太多简历、也帮忙修改过很多的简历&#xff0c;发现很多同学是完全不会写简历的、会犯很多常见的问题&#xff0c;不能把自己的优势充分展示出来&#xff0c;导致错失了很多面试机会&#xff0c;实在是…

如何将TRIZ的“最终理想解”应用到机器人电机控制设计中?

TRIZ理论&#xff0c;作为一套系统的创新方法论&#xff0c;旨在帮助设计师和工程师突破思维惯性&#xff0c;解决复杂的技术难题。其核心思想之一便是“最终理想解”&#xff0c;它如同一盏明灯&#xff0c;指引着我们在技术创新的道路上不断前行。最终理想解追求的是产品或技…

“听到“温度 - 科学家发现人类感知的新层次

雷克曼大学&#xff08;IDC Herzliya&#xff09;伊夫切尔大脑、认知与技术研究所&#xff08;BCT Institute&#xff09;的研究人员发现了一种在很大程度上被忽视的感知能力&#xff0c;他们利用机器学习揭示了跨模态感知–不同感官模态之间的相互作用–的动态。在最近的一项研…

【HarmonyOS NEXT星河版开发学习】小型测试案例06-小红书卡片

个人主页→VON 收录专栏→鸿蒙开发小型案例总结​​​​​ 基础语法部分会发布于github 和 gitee上面&#xff08;暂未发布&#xff09; 前言 在鸿蒙&#xff08;HarmonyOS&#xff09;开发中&#xff0c;自适应伸缩是指应用程序能够根据不同设备的屏幕尺寸、分辨率和形态&…

2-63 基于matlab的GMPHD滤波器算法

基于matlab的GMPHD滤波器算法&#xff08;1&#xff09;本次仿真采用线性CV模型&#xff1b;&#xff08;2&#xff09;观测模型为线性条件下&#xff0c;观测值为X&#xff0c;Y轴坐标&#xff1b;&#xff08;3&#xff09;验证GMPHD算法对多目标跟踪的有效性&#xff1b;输出…

对于产品设计方面来说,3D 技术的应用有哪些优势?

3D技术在产品设计方面提供了许多优势&#xff0c;主要体现在以下几个方面&#xff1a; 1、可视化&#xff1a;设计师利用3D技术创建产品三维模型&#xff0c;使得产品在设计阶段就能被可视化&#xff0c;帮助团队更好地理解产品的外观和功能。 2、精确性&#xff1a;3D模型可…

人人都能搞定的大模型原理 - 神经网络

人工智能的发展起步于1950年&#xff0c;期间经历了各种里程碑和变革&#xff0c;与此相关的神经网络技术也从最初的单层感知到复杂的层级和卷积神经网络一路创新和变革&#xff0c;不断推动人工智能领域的发展&#xff0c;直到 2022 年 ChatGPT 的问世&#xff0c;彻底引爆了…

Leetcode174.地下城游戏

题目 代码&#xff08;首刷看解析 2024年5月6日&#xff09; class Solution { public:// 动态规划int calculateMinimumHP(vector<vector<int>>& dungeon) {// dp[i][j]从(i,j)出发&#xff0c;到达终点所需要的最少血量int m dungeon.size();int n dungeo…

【1.9】动态规划-解单词拆分

一、题目 给定一个非空字符串s和一个包含非空单词的列表wordDict&#xff0c;判定s是否可以被空格拆分为一个或多个在字典中出现的单词。 说明&#xff1a; 1. 拆分时可以重复使用字典中的单词。 2. 你可以假设字典中没有重复的单词。 示例1&#xff1a; 示例2&#xff1a;…

SpringBoot优雅开发REST API最佳实践

目录 RestController注解 接口版本管理 定义版本号注解 编写版本号匹配逻辑处理器 注册处理器 参数校验 Validated注解 使用注解进行参数校验 统一异常捕获 RestControllerAdvice注解 使用RestControllerAdvice注解处理参数异常 统一响应封装 统一状态码 统一返回结…

[Vue3] 8 toRef与toRefs的用法

前言 目标 1 toRef与toRefs的用法 2 toRef与ref的不同 toRef与toRefs的用法 看一下官方给的解释 也是就当定义const name = toRef(person,name) 改变name = 李四的值,person中的name值也会同步变化 toRef 只能处理一个对象中的一个属性 <h2>{{person }}</h2&g…

超详细!!! LVS(Linux virual server)负载均衡知识及其NAT模式、DR模式、火墙标记实验

目录 前言系统性能扩展方式集群Cluster分布式集群与分布式 四层转发与七层转发的区别 LVS&#xff08;Linux virual server&#xff09;一、LVS介绍LVS相关概念 二、LVS集群结构体系1. 负载均衡层&#xff08;Load Balancer&#xff09;2. 服务器群组层&#xff08;Server Pool…

RuoYi-Cloud开启控制台日志

打开对应微服务resources目录下的logback.xml文件&#xff0c;将"系统模块日志级别控制"改为debug。

坐标变换矩阵

在高级驾驶辅助系统&#xff08;ADAS&#xff09;领域&#xff0c;存在多种常用的坐标系&#xff1a;雷达Lidar坐标系、车辆坐标系、相机坐标系、图像坐标系。 旋转变换矩阵&#xff08;Rotation Matrix&#xff09; 在二维平面xoy上&#xff0c;由绿色坐标系逆时针旋转θ到蓝…

U盘出现文件目录损坏的修复之道

在数字化时代&#xff0c;U盘作为便携式存储设备&#xff0c;承载着无数重要的文件与数据&#xff0c;成为我们工作、学习和生活中不可或缺的一部分。然而&#xff0c;当U盘遭遇“文件或目录损坏且无法读取”的困境时&#xff0c;这份便捷瞬间转化为焦虑与困扰。本文将深入探讨…