C# 有效的字母异位词

242 有效的字母异位词

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

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

示例 1:

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

输出: true

示例 2:

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

输出: false

提示:

1 <= s.length, t.length <= 5 * 104

s 和 仅包含小写字母t

解决方案:

提供思路

1)暴力解法,两层for循环,同时还要记录字符是否重复出现,时间复杂度是 O(n^2)。

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

需要定义一个多大的数组呢,定一个数组叫做record,大小为26 就可以了,初始化为0,因为字符a到字符z的ASCII也是26个连续的数值。

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

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

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

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

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

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

上代码:

csharp 复制代码
public class Solution
{
    public bool IsAnagram(string s, string t)
    {
        int sl = s.Length, tl = t.Length;
        if (sl != tl) return false;
        int[] a = new int[26];
        for (int i = 0; i < sl; i++)
        {
            a[s[i] - 'a']++;
            a[t[i] - 'a']--;
        }
        foreach (int i in a)
        {
            if (i != 0)
                return false;
        }
        return true;
    }
}

以上是碰到的第二百四十二题,后续持续更新。感觉对你有帮助的小伙伴可以帮忙点个赞噢!

相关推荐
ZhengEnCi11 小时前
GPT-6 Astra 爆改 Qwen 权重真有那么神吗:权重空间编程 0.016% 参数的真相
算法·架构
罗西的思考11 小时前
【轻量化复刻大模型 / KIMI K3】KDA(Kimi Delta Attention):并行
人工智能·算法·机器学习
吃一碗粉只付一碗钱11 小时前
16-SqlSugar多库ConfigId与按实体选连接
sqlserver·c#
rockey62712 小时前
AScript之字符串模板
c#·.net·script·expression·动态脚本
夜不会漫长13 小时前
C++:红黑树
数据结构·算法
文丑颜不良啊13 小时前
LeetCode1661~1680题目解析
java·leetcode
will_net13 小时前
Redis集群部署+Redis 链接地址放入Aollo +c#项目接入Redis
redis·c#·bootstrap
AI备案指南-满满14 小时前
算法备案审核不通过,一般是什么原因?
java·人工智能·算法·大模型备案·算法备案·大模型登记
Ramble_Naylor14 小时前
Rust深度解读:Send 与 Sync 的本质与线程安全边界
python·算法·rust
秋天的怀念_David14 小时前
算法一千零一夜 · 第二十三夜 电力民生写成的曲线
java·程序人生·算法