有效的字母异位词

news/2024/12/22 14:05:30/

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

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

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/valid-anagram

思路:

        先看暴力的解法,两层for循环,同时还要记录字符是否重复出现,很明显时间复杂度是 O(n^2),不过多介绍。

        接下来我们来看看更优的方式,数组其实就是一个简单哈希表,而且这道题目中字符串只有小写字符,那么就可以定义一个数组,来记录字符串s里字符出现的次数。

        这里我们可以定义了一个数组hash,大小为26,初始化为0。因为字符a到字符z的ASCII也是26个连续的数值,所以用数组较为合适(比较数组也是hash的一种)。

        定义一个数组叫做hash用来上记录字符串s里字符出现的次数.

        需要把字符映射到数组也就是哈希表的索引下标上,因为字符a到字符z的ASCII是26个连续的数值,所以字符a映射为下标0,相应的字符z映射为下标25。

        再遍历 字符串s的时候,只需要将 s[i] - ‘a’ 所在的元素做+1 操作即可,并不需要记住字符a的ASCII,只要求出一个相对数值就可以了。 这样就将字符串s中字符出现的次数,统计出来了。

        那看一下如何检查字符串t中是否出现了这些字符,同样在遍历字符串t的时候,对t中出现的字符映射哈希表索引上的数值再做-1的操作。

        那么最后检查一下,hash数组如果有的元素不为零0,说明字符串s和t一定是谁多了字符或者谁少了字符,return false。

        最后如果hash数组所有元素都为零0,说明字符串s和t是字母异位词,return true。

        时间复杂度为O(n),空间上因为定义是的一个常量大小的辅助数组,所以空间复杂度为O(1)。

代码如下:

class Solution {
public:bool isAnagram(string s, string t) {int hash[26] = {0};for(int i = 0; i < s.size(); i++){hash[s[i] - 'a']++;}for(int i = 0; i < t.size(); i++){hash[t[i] - 'a']--;}for(int i = 0; i < 26; i++){if(hash[i] != 0){return false;}}return true;}
};

http://www.ppmy.cn/news/52717.html

相关文章

Spring Bean生命周期源码详解

文章目录 Bean生命周期源码生成BeanDefinitionSpring容器启动时创建单例Bean合并BeanDefinitiongetBean()方法加载类实例化前实例化BeanDefinition的后置处理实例化后依赖注入执行Aware回调初始化前初始化初始化后销毁逻辑 Bean生命周期源码 我们创建一个ApplicationContext对…

Elasticsearch简单搜索以及聚合分析

1.批量索引文档 如果你有大量文档要索引&#xff0c;你能通过批量 API&#xff08;bulk API&#xff09; 来批量提交它们。批量文档操作比单独提交请求显著更快&#xff0c;因为它极简了网络往返。 最佳的批量数量取决于许多因素&#xff1a;文档的大小和复杂度、索引和搜索的…

OJ练习第84题——按字典序排在最后的子串

按字典序排在最后的子串 力扣链接&#xff1a;1163. 按字典序排在最后的子串 题目描述 给你一个字符串 s &#xff0c;找出它的所有子串并按字典序排列&#xff0c;返回排在最后的那个子串。 示例 示例 1&#xff1a; 输入&#xff1a;s “abab” 输出&#xff1a;“bab…

5.2 构造数值积分公式的基本方法与有关概念的例题分析

书上例题&#xff1a; 例3 确定求积公式 中的系数&#xff0c;使其具有尽可能高的代数精度。 我的答案&#xff1a; 一、信息 1.给了我一个求积公式 2.确定求积公式中的系数 3.使得这个求积系数具有尽可能高的代数精度。 二、分析 条件1&#xff1a;告诉我这个求积公…

全新推出!赛宁BAS智能安全验证,让企业安全系统坚如磐石

赛宁BAS智能安全验证系统&#xff0c;可以通过模拟网络攻击来检验安全防御手段有效性&#xff0c;量化安全风险并给出安全加固建议&#xff0c;帮助行业客户降低安全运营成本&#xff0c;提升网络安全防御能力。 一、解析安全防御现状 在合规时代背景下&#xff0c;虽然大部分…

AI 时代的学习方式: 和文档对话

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;蚂蚁集团高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《EffectiveJava》独家解析》专栏作者。 热门文章推荐…

WeakHashMap的应用场景

WeakHashMap&#xff0c;从名字可以看出它是某种 Map。它的特殊之处在于 WeakHashMap 里的entry可能会被GC自动删除&#xff0c;即使程序员没有调用remove()或者clear()方法。 1、适用于缓存场景 更直观的说&#xff0c;当使用 WeakHashMap 时&#xff0c;即使没有显示的添加或…

【LeetCode: 5. 最长回文子串 | 暴力递归=>记忆化搜索=>动态规划 => 中心扩展法】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…