剑指 Offer II 032. 有效的变位词


comments: true
edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20032.%20%E6%9C%89%E6%95%88%E7%9A%84%E5%8F%98%E4%BD%8D%E8%AF%8D/README.md

剑指 Offer II 032. 有效的变位词

题目描述

给定两个字符串 st ,编写一个函数来判断它们是不是一组变位词(字母异位词)。

注意:若 st 中每个字符出现的次数都相同且字符顺序不完全相同,则称 st 互为变位词(字母异位词)。

 

示例 1:

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

示例 2:

输入: s = "rat", t = "car"
输出: false

示例 3:

输入: s = "a", t = "a"
输出: false

 

提示:

  • 1 <= s.length, t.length <= 5 * 104
  • s and t 仅包含小写字母

 

进阶: 如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?

 

注意:本题与主站 242 题相似(字母异位词定义不同):https://leetcode.cn/problems/valid-anagram/

解法

方法一:计数

如果字符串 s s s 与字符串 t t t 长度不相等,或者字符串 s s s 与字符串 t t t 完全相等,那么 s s s t t t 一定不是变位词,返回 false

否则,我们用一个长度为 26 26 26 的数组 c n t cnt cnt 维护字符串 s s s 中每个字母出现的次数与字符串 t t t 中每个字母出现的次数的差值。如果 c n t cnt cnt 数组的所有元素都为 0 0 0,则 s s s t t t 互为变位词,返回 true,否则返回 false

时间复杂度 O ( m + n + ∣ Σ ∣ ) O(m + n + |\Sigma|) O(m+n+∣Σ∣),空间复杂度 O ( ∣ Σ ∣ ) O(|\Sigma|) O(∣Σ∣),其中 m m m n n n 分别是字符串 s s s t t t 的长度,而 ∣ Σ ∣ |\Sigma| ∣Σ∣ 是字符集,在本题中字符集为所有小写字母,因此 ∣ Σ ∣ = 26 |\Sigma| = 26 ∣Σ∣=26

Python3
class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        if len(s) != len(t) or s == t:
            return False
        return Counter(s) == Counter(t)
Java
class Solution {
    public boolean isAnagram(String s, String t) {
        int m = s.length();
        int n = t.length();
        if (m != n || s.equals(t)) {
            return false;
        }
        int[] cnt = new int[26];
        for (int i = 0; i < m; ++i) {
            ++cnt[s.charAt(i) - 'a'];
            --cnt[t.charAt(i) - 'a'];
        }
        for (int x : cnt) {
            if (x != 0) {
                return false;
            }
        }
        return true;
    }
}
C++
class Solution {
public:
    bool isAnagram(string s, string t) {
        int m = s.size();
        int n = t.size();
        if (m != n || s == t) {
            return false;
        }
        vector<int> cnt(26);
        for (int i = 0; i < m; ++i) {
            ++cnt[s[i] - 'a'];
            --cnt[t[i] - 'a'];
        }
        for (int x : cnt) {
            if (x) {
                return false;
            }
        }
        return true;
    }
};
Go
func isAnagram(s string, t string) bool {
	m, n := len(s), len(t)
	if m != n || s == t {
		return false
	}
	cnt := [26]int{}
	for i, c := range s {
		cnt[c-'a']++
		cnt[t[i]-'a']--
	}
	for _, x := range cnt {
		if x != 0 {
			return false
		}
	}
	return true
}
TypeScript
function isAnagram(s: string, t: string): boolean {
    const m = s.length;
    const n = t.length;
    if (m !== n || s === t) {
        return false;
    }
    const cnt: number[] = new Array(26).fill(0);
    for (let i = 0; i < m; ++i) {
        ++cnt[s[i].charCodeAt(0) - 'a'.charCodeAt(0)];
        --cnt[t[i].charCodeAt(0) - 'a'.charCodeAt(0)];
    }
    return cnt.every(x => x === 0);
}
Swift
class Solution {
    func isAnagram(_ s: String, _ t: String) -> Bool {
        let m = s.count
        let n = t.count
        if m != n || s == t {
            return false
        }

        var cnt = [Int](repeating: 0, count: 26)

        for (sc, tc) in zip(s, t) {
            cnt[Int(sc.asciiValue! - Character("a").asciiValue!)] += 1
            cnt[Int(tc.asciiValue! - Character("a").asciiValue!)] -= 1
        }

        for x in cnt {
            if x != 0 {
                return false
            }
        }

        return true
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux:(3)

一&#xff1a;Linux和Linux互传&#xff08;压缩包&#xff09; scp:Linux scp 命令用于 Linux 之间复制文件和目录。 scp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。 scp 是加密的&#xff0c;rcp 是不加密的&#xff0c;scp 是…

qt-C++笔记之QtCreator新建项目即Create Project所提供模板的逐个尝试

qt-C笔记之QtCreator新建项目即Create Project所提供模板的逐个尝试 code review! 文章目录 qt-C笔记之QtCreator新建项目即Create Project所提供模板的逐个尝试1.Application(Qt):Qt Widgets Application1.1.qmake版本1.2.cmake版本 2.Application(Qt):Qt Console Applicati…

学习threejs,Materials常量汇总

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️Materials常量汇总1.1.1 面…

SOC-ATF 安全启动BL1流程分析(1)

一、ATF 源码下载链接 1. ARM Trusted Firmware (ATF) 官方 GitHub 仓库 GitHub 地址: https://github.com/ARM-software/arm-trusted-firmware 这是 ATF 的官方源码仓库&#xff0c;包含最新的代码、文档和示例。 下载方式&#xff1a; 使用 Git 克隆仓库&#xff1a; git…

AI如何改变传统工厂的生产模式?

随着第四次工业革命的浪潮席卷全球&#xff0c;制造业的数字化转型成为企业在竞争中脱颖而出的关键。过去&#xff0c;传统制造业往往依赖于大量的人工操作和低效率的管理流程&#xff0c;而如今&#xff0c;智能化、自动化、数据化已经成为未来制造业的必由之路。从车间到云端…

Deepseek开源周第三天:DeepGEMM发布

Deepseek开源周第三天&#xff1a;DeepGEMM发布 前言 上周deepseek宣布&#xff0c;将在本周陆续发布五个开源项目&#xff0c;这些库已经在生产环境中经过了记录、部署和实战测试。 今天是deepseek开源周的第三天&#xff0c;deepseek发布了一个名为 DeepGEMM 的项目&#x…

【组态PLC】基于三菱西门子S7-200PLC和组态王液料混合系统组态设计【含PLC组态源码 M016期】

控制要求 总体控制要求&#xff1a;如面板图所示&#xff0c;本装置为三种液体混合模拟装置&#xff0c;由液面传感器SL1、SL2、SL3&#xff0c;液体A、B、C阀门与混合液阀门由电磁阀YV1、YV2、YV3、YV4&#xff0c;搅匀电机M&#xff0c;加热器H&#xff0c;温度传感器T组成。…

Qt Creator + CMake 构建教程

此教程基于: Qt 6.7.4Qt Creator 15.0.1CMake 3.26.4 Qt 6 以下的版本使用 CMake 构建可能会存在一些问题. 目录 新建窗体工程更新翻译添加资源软件部署(Deploy) 此教程描述了如何一步步在 Qt Creator 中使用 CMake 构建应用程序工程. 涉及 新建窗体工程, 更新翻译, 添加资源, …

内网渗透测试-Vulnerable Docker靶场

靶场来源&#xff1a; Vulnerable Docker: 1 ~ VulnHub 描述&#xff1a;Down By The Docker 有没有想过在容器中玩 docker 错误配置、权限提升等&#xff1f; 下载此 VM&#xff0c;拿出您的渗透测试帽并开始使用 我们有 2 种模式&#xff1a; - HARD&#xff1a;这需要您将 d…

【JavaEE】SpringMVC获取HTTP中的元素

目录 一、获取URL中的参数PathVariable二、上传⽂件RequestPart三、获取Cookie/Session3.1 HttpServletRequest和 HttpServletResponse3.2 获取Cookie3.2.1 使用HttpServletRequest3.2.2 使用注解CookieValue 3.3 设置session3.4 获取session3.4.1 使用HttpServletRequest3.4.2…

【构建工具】Gradle Kotlin DSL中的大小写陷阱:BuildConfigField

在Android开发当中&#xff0c;BuildConfig是一个非常有用的功能&#xff0c;它允许我们在构建过程中定义常量&#xff0c;并在运行时使用它们。But&#xff01;&#xff01;当我们从传统的Groovy DSL迁移到Kotlin DSL时或者被Android Studio坑的时候&#xff0c;有一些细微的差…

递归、搜索与回溯第二讲:二叉树中的深搜 穷举vs暴搜vs深搜vs回溯vs剪枝

递归、搜索与回溯第二讲&#xff1a;二叉树中的深搜 && 穷举vs暴搜vs深搜vs回溯vs剪枝 1.计算布尔二叉树的值2.求根节点到叶结点数字之和3.二叉树剪枝4.验证二叉搜索树5.二叉搜索树中第K小的元素6.二叉树的所有路径7.全排列8.子集 1.计算布尔二叉树的值 2.求根节点到叶…

可编辑PPT | DeepSeek如何赋能职场应用

这个PPT的核心内容是介绍DeepSeek如何赋能职场应用&#xff0c;从提示语技巧到多场景应用的详细解读。PPT首先介绍了DeepSeek的背景和团队&#xff0c;展示了其在AI领域的多项赛事奖项和研究成果&#xff0c;突出了其在人机协同和人机共生领域的专业能力。接着&#xff0c;PPT详…

网络层(Internet Layer)

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Linux 目录 &#x1f680; &#xff1a;&#x1f525; 前言 &#x1f98b; IP 地址&#xff1a;网络中的“门牌号”&#x1f98b; IP 地址的组成&#x1f98b; IPv4 到 IPv6 的过渡 一&#xff1a;…

final / 抽象类与抽象方法 / 接口

1. final 关键字 final&#xff1a;最终的 1.final可以用来修饰的结构&#xff1a;类&#xff0c;方法&#xff0c;变量 2.final用来修饰一个类&#xff1a;此类不能被其它类继承&#xff1b; 如 String类&#xff0c;System类&#xff0c;StringBuffer类 3.final用来修饰…

DeepSeek开源周Day1:FlashMLA引爆AI推理性能革命!

项目地址&#xff1a;GitHub - deepseek-ai/FlashMLA 开源日历&#xff1a;2025-02-24起 每日9AM(北京时间)更新&#xff0c;持续五天&#xff01; ​ 一、开源周震撼启幕 继上周预告后&#xff0c;DeepSeek于北京时间今晨9点准时开源「FlashMLA」&#xff0c;打响开源周五连…

9.编写负载均衡模块|编写judge功能|postman进行调试(C++)

编写负载均衡模块 代码整体结构 oj_control.hpp // code: #include... // input: "" void Judge(const std::string &number, const std::string in_json, std::string *out_json) {// 0. 根据题目编号&#xff0c;直接拿到对应的题目细节// 1. in_json进行反…

安装react报错

安装react报错 背景 执行命令npx create-react-app my-app&#xff0c;然后出现报错unable to resolve dependency tree 解决&#xff1a; 出现这个报错是因为依赖包版本出现冲突&#xff0c;查看package.json可以看到react版本是19.0.0&#xff0c;但是testing-library/rea…

CAD实现一键 面域转线(闭合多段线)——CAD c#二次开发

CAD中存在面域&#xff08;region&#xff09;&#xff0c;当用系统自带命令是&#xff0c;生成的是断开的直线Line。 此插件可实现面域转为闭合的多段线&#xff08;Polyline&#xff09;。效果如下&#xff1a; 一次转600个图形 部分代码如下&#xff1a; public class 面…

快速理解Raft分布式共识算法

目录 拜占庭将军问题 Raft算法是干什么的&#xff1f; 一、领导选举&#xff08;选老板&#xff09; 二、日志复制&#xff08;发通知&#xff09; 三、安全性&#xff08;防篡改&#xff09; &#x1f330; 举个真实例子 ✔️ Raft的优势 基础 状态机 节点类型 任期…