备战秋招60天算法挑战,Day17

news2025/1/17 6:09:54

题目链接: https://leetcode.cn/problems/valid-anagram/

视频题解: https://www.bilibili.com/video/BV1db421J7qK/

LeetCode 242. 有效的字母异位词

题目描述

给定两个字符串 st ,编写一个函数来判断 t 是否是 s 的字母异位词。

注意:st 中每个字符出现的次数都相同,则称 st 互为字母异位词。

举个例子:

输入: s = "anagram", t = "nagaram"
输出: true

视频题解

有效的字母异位词

思路来源

思路来源

思路解析

方法一 排序

分别对st进行排序,然后比较排序后的字符串是否相等。

C++代码

class Solution {
public:
    bool isAnagram(string s, string t) {
        sort(s.begin(), s.end());
        sort(t.begin(), t.end());
        return s == t;
    }
};

java代码

class Solution {
    public boolean isAnagram(String s, String t) {
        char[] sArray = s.toCharArray();
        char[] tArray = t.toCharArray();
        Arrays.sort(sArray);
        Arrays.sort(tArray);
        return Arrays.equals(sArray, tArray);
    }
}

python代码

class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        return sorted(s) == sorted(t)

复杂度分析

时间复杂度: 快排的时间复杂度是O(nlogn),其中n是字符串的长度。

空间复杂度: 快排的空间复杂度是O(logn)

方法二 hash表

假设s = "anagram"t = "nagaram"

  1. 定义两个hashu_mapS用来统计s中字符出现的次数,u_mapT用来统计t中字符出现的次数。

  1. 比较两个hash表中的元素是否相等。

C++代码

class Solution {
public:
    bool isAnagram(string s, string t) {
        int s_len = s.length();
        int t_len = t.length();
        if (s_len != t_len)
            return false;
        //保存s中字符出现的次数
        unordered_map<char, int> u_mapS;
        //保存t中字符出现的次数
        unordered_map<char, int> u_mapT;
        for (int i = 0; i < s_len; ++i) {
            u_mapS[s[i]]++;
            u_mapT[t[i]]++;
        }

        for (int i = 0; i < s_len; ++i) {
            if (u_mapS[s[i]] != u_mapT[s[i]])
                return false;
        }
        return true;
    }
};

java代码

class Solution {
    public boolean isAnagram(String s, String t) {
        int s_len = s.length();
        int t_len = t.length();
        if (s_len != t_len)
            return false;
        //保存s中字符出现的次数
        Map<Character, Integer> u_mapS = new HashMap<>();
        //保存t中字符出现的次数
        Map<Character, Integer> u_mapT = new HashMap<>();
        for (int i = 0; i < s_len; ++i) {
            u_mapS.put(s.charAt(i), u_mapS.getOrDefault(s.charAt(i), 0) + 1);
            u_mapT.put(t.charAt(i), u_mapT.getOrDefault(t.charAt(i), 0) + 1);
        }

        for (int i = 0; i < s_len; ++i) {
            if (!u_mapS.getOrDefault(s.charAt(i), 0).equals(u_mapT.getOrDefault(s.charAt(i), 0)))
                return false;
        }
        return true;
    }
}

python代码

class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        s_len = len(s)
        t_len = len(t)
        if s_len != t_len:
            return False
        #保存s中字符出现的次数
        u_mapS = defaultdict(int)
        #保存t中字符出现的次数
        u_mapT = defaultdict(int)
        for i in range(s_len):
            u_mapS[s[i]] += 1
            u_mapT[t[i]] += 1

        for i in range(s_len):
            if u_mapS[s[i]] != u_mapT[s[i]]:
                return False
        return True

复杂度分析

时间复杂度: 只需要遍历两遍字符串,哈希表的存取都是常量的时间复杂度,所以时间复杂度为O(n),其中n是字符串的长度。

空间复杂度: 需要使用两个hash表,所以空间复杂度为O(n),其中n是字符串的长度。

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

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

相关文章

同城搭子社交系统开发同城搭子群活动APP圈子动态小程序

引言 随着互联网技术的飞速发展&#xff0c;同城搭子社交系统作为一种新兴的社交模式&#xff0c;正逐渐在市场中占据一席之地。该系统通过搭子群活动和圈子动态等功能&#xff0c;为用户提供了一种高效、精准的社交体验。本文将从市场前景、使用人群、盈利模式以及运营推广等…

azure 上如何创建 Kubernetes 集群?

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门面向中国程序员和企业提供企业级一体化 DevOps 平台&#xff0c;用来帮助用户实现需求管理、源代码托管、CI/CD、安全合规&#xff0c;而且所有的操作都是在一个平台上进行&#xff0c;省事省心省钱。可以一键安装极狐GitL…

SO_REUSEADDR 和 SO_REUSEPORT 的区别 / Linux TCP SO_REUSEPORT — 使用和实现 ……

注&#xff1a;机翻&#xff0c;未校。 Difference Between SO_REUSEADDR and SO_REUSEPORT Last Updated : 05 Feb, 2023 Processes use sockets as endpoints of a two-way channel to transfer data. The socket options SO_REUSEADDR and SO_REUSEPORT have different ma…

血缘系统 datahub + Sqllineage

1.说明 业界比较主流的数据血缘系统&#xff0c;目前还没能达到与调度系统耦合&#xff0c;最大难点在于代码解析。当某张表下游太多时(特别是维度表)&#xff0c;展示也失去了意义&#xff0c;所以多用于排查某张应用表的上游从哪里开。使用方一般为对数仓表结构不太熟悉的业务…

Win/Mac/Linux/Andriod/IOS界面UI设计 - pyside6 - 03 文件(JSON/TXT/PD)查看和打印

文章目录 写在前面一、文件(JSON/TXT/PD)查看和打印1.1 页面效果1.2 项目目录结构1.3项目源码1.3.1 main-app.py1.3.2 _03_documentviewer\main.py1.3.3 _03_documentviewer\mainwindow.py1.3.4 _03_documentviewer\abstractviewer.py1.3.5 _03_documentviewer\ui_mainwindow.p…

算法023:寻找旋转排序数组中的最小值

寻找旋转排序数组中的最小值. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/find-minimum-in-rotated-sorted-array/ 这个题乍一看可以用二分查找&#xff0c;并且…

天行健的精益生产方案有多强?点击一看究竟

众所周知&#xff0c;导入精益生产管理方法对企业来说是一种全新的变革&#xff0c;能为企业注入了全新的血液和活力&#xff0c;使濒临破产和倒闭的企业得以存活并迅速发展成长&#xff0c;提升企业的核心竞争力&#xff0c;甚至是成为行业的巨头和领跑者。具体方案如深圳天行…

这个大模型确实成功消除了我在论文阅读上的障碍

&#x1f431; 个人主页&#xff1a;TechCodeAI启航&#xff0c;公众号&#xff1a;TechCodeAI &#x1f64b;‍♂️ 作者简介&#xff1a;2020参加工作&#xff0c;专注于前端各领域技术&#xff0c;共同学习共同进步&#xff0c;一起加油呀&#xff01; &#x1f4ab; 优质专…

图像压缩算法

8.1 JPEG压缩 (JPEG Compression) 介绍 JPEG&#xff08;Joint Photographic Experts Group&#xff09;压缩是最常用的有损图像压缩算法之一。它通过减少图像中的冗余数据来实现高效压缩&#xff0c;特别适用于自然图像。 原理 JPEG压缩的基本步骤包括颜色空间转换、离散余…

偏导数的可视化

偏导数的可视化 flyfish 函数 f ( x , y ) sin ⁡ ( x ) ⋅ cos ⁡ ( y ) f(x, y) \sin(x) \cdot \cos(y) f(x,y)sin(x)⋅cos(y) import numpy as np from sympy import lambdify, sin, cos from sympy.abc import x, y import matplotlib.pyplot as plt from mpl_toolk…

【Ubuntu24.04搭建turn服务器】

1.安装与启动 首先安装coturn sudo apt-get update -y sudo apt-get install coturn -y可以看到默认的TURN服务是不启动的 # Uncomment it if you want to have the turnserver running as an automatic system service daemon # #TURNSERVER_ENABLED1编辑配置文件取消注释 …

【区块链+食品安全】湖南省食品行业联合会:溯链中国—基于区块链的食品安全可信追溯平台 | FISCO BCOS应用案例

食品安全追溯体系的建设&#xff0c;能够切实加强食品安全监管&#xff0c;确保人民群众饮食安全和身体健康&#xff0c;是创建食品安全城市必不可少的一部分。然而&#xff0c;中心化存储、信息孤岛、窜货是传统溯源行业最大痛点。区块链技术的快速发展&#xff0c; 使得防伪溯…

42.【C语言】冒泡排序

目录&#xff1a; 冒泡排序 *核心思想 *分析 *代码 *优化 15.冒泡排序(bubble sort) *核心思想&#xff1a;两两相邻的元素进行比较&#xff0c;满足条件则两者交换 *分析 现要求升序排序 输入: 9 8 7 6 5 4 3 2 1 0 输出&#xff1a;0 1 2 3 4 5 6 7 8 9 下面展示一趟冒泡排…

NLP从零开始------9文本进阶处理之文本相似度计算

1.文本相似度计算简介 在自然语言处理中&#xff0c;经常会涉及度量两个文本相似度的问题。在诸如对话系统和信息减速等中&#xff0c;度量句子或短语之间的相似度尤为重要。在新闻学传媒中应用文本相似度可以帮助读者快速检索到想要了解的报道。 文本相似度的定义式如下所示&a…

江协科技STM32学习笔记(第08章 USART串口)

第08章 USART串口 8.1 USART串口协议 8.1.1 通信接口 在STM32中&#xff0c;集成了很多用于通信的外设模块&#xff0c;比如下表所列。 通信的目的&#xff1a;将一个设备的数据传送到另一个设备&#xff0c;扩展硬件系统。 针对STM32内部没有的功能&#xff0c;比如蓝牙无…

04创建型设计模式——建造者模式

一、建造者模式简介 建造者模式&#xff08;Builder Pattern&#xff09;又被称为生成器模式。它旨在构建一个复杂对象的各个部分&#xff0c;而不需要指定该对象的具体类。该模式特别适用于对象的构建过程复杂且需要多个步骤的情况。建造者模式是一种对象创建型模式之一&…

【Mysql】mysql三种安装方式(二进制、yum、docker)

一、环境信息 centos7.6_x86、glib2.17 mysql官网下载地址&#xff1a;MySQL :: Download MySQL Community Server 二、 二进制安装 #下载解压安装包 [roothadoop03 ~]# wget -c https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.39-linux-glibc2.17-x86_64.tar.xz [ro…

PX4二次开发快速入门

文章目录 前言一、概述二、二次开发基础&#xff08;自定义工作队列&#xff0c;自定义uorb&#xff09;三、自定义串口驱动&#xff08;添加一个毫米波雷达并定高&#xff09;四、自定义I2C驱动&#xff08;驱动一个oled显示屏&#xff09;五、自定义参数六、自定义日志七、自…

机器学习笔记:编码器与解码器

目录 介绍 组成结构 代码实现 编码器 解码器 合并编码器-解码器 思考 介绍 在机器翻译中&#xff0c;输入的序列与输出的序列经常是长度不相等的序列&#xff0c;此时&#xff0c;像自然语言处理这种直接使用循环神经网络或是门控循环单元的方法就行不通了。因此&#x…

Qt 窗口:菜单、工具与状态栏的应用

目录 引言&#xff1a; 1. 菜单栏 1.1 创建菜单栏 1.2 在菜单栏中添加菜单 1.3 创建菜单项 1.4 在菜单项之间添加分割线 1.5 综合示例 2.工具栏 2.1 创建工具栏 2.2 设置停靠位置 2.3 设置浮动属性 2.4 设置移动属性 3. 状态栏 3.1 状态栏的创建 3.2 在状态栏中显…