排序题目之有效的字母异位词

题目:给定两个字符串 st ,编写一个函数来判断 t 是否是 s 的字母异位词(python语言)。

1 示例 1:
2 
3 输入: s = "anagram", t = "nagaram"
4 输出: true
5 示例 2:
6 
7 输入: s = "rat", t = "car"
8 输出: false

 

说明: 你可以假设字符串只包含小写字母。

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

下面看下面大神的操作:

首先说一下sorted/sort的用法:

基本排序,调用sorted()函数即可放回一个新的已排序列表,如果你不需要原列表亦可以使用list.sort()实现,他直接修改原列表,效率会比sorted()高。

1 sorted([5, 2, 3, 1, 4])   #[1, 2, 3, 4, 5]
2 a = [5, 2, 3, 1, 4]   #a.sort()  [1, 2, 3, 4, 5]

 

另外一个区别是, list.sort() 方法只是为列表定义的,而 sorted() 函数可以接受任何可迭代对象。

1 sorted({1: 'D', 2: 'B', 3: 'B', 4: 'E', 5: 'A'})  #[1, 2, 3, 4, 5]

题解1:

通过将 s 的字母重新排列成 t 来生成变位词。因此,如果 T 是 S 的变位词,对两个字符串进行排序将产生两个相同的字符串。此外,如果 s 和 t 的长度不同 t 不能是 s 的变位词,我们可以提前返回。

复制代码
 1 #排序
 2 class Solution(object):
 3     def isAnagram(self, s, t):
 4         """
 5         :type s: str
 6         :type t: str
 7         :rtype: bool
 8         """
 9         if len(s) != len(t):
10             return False
11         if sorted(s) != sorted(t):
12             return False
13         return True
复制代码

 

题解2:

  • 为了检查 t 是否是 s 的重新排列,我们可以计算两个字符串中每个字母的出现次数并进行比较。因为 S 和 T 都只包含 A−Z 的字母,所以一个简单的 26 位计数器表就足够了。

  • 我们需要两个计数器数表进行比较吗?实际上不是,因为我们可以用一个计数器表计算 s 字母的频率,用 t 减少计数器表中的每个字母的计数器,然后检查计数器是否回到零。

复制代码
 1 #哈希
 2 #标准字典包括setdefault方法()获取一个值,如果值不存在,建立一个默认。相比之下,defaultdict允许调用者在初始化时预先设置默认值。
 3 class Solution(object):
 4     def isAnagram(self, s, t):
 5         """
 6         :type s: str
 7         :type t: str
 8         :rtype: bool
 9         """
10         if len(s) != len(t):
11             return False
12         dicts = collections.defaultdict(int)
13         for i in range(len(s)):
14             dicts[s[i]] = dicts[s[i]] + 1
15             dicts[t[i]] = dicts[t[i]] - 1
16         for val in dicts.values():
17             if val != 0:
18                 return False
19         return True
复制代码

 

初学者

分享及成功,你的报应就是我,记得素质三连!

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

 

posted @   Xbhog  阅读(223)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
点击右上角即可分享
微信分享提示