● 今日学习的文章链接文章链接和题目链接视频链接学透哈希表,数组使用有技巧!Leetcode:242.有效的字母异位词_哔哩哔哩_bilibili
● 自己看到题目的第一想法
对于字母异位词有点不理解,查询后发现即出现字母相同,次数相同,顺序不同的两个字符串。
第一想法是先查询记录第一个字符串出现哪些字母以及次数,再查询第二个字符串t出现的字母以及次数,两相比较即可得知是否是字母异位词,但是具体怎么查询记录字母和次数代码不太会写。
看评论及查资料可知用sorted()对两个字符串排序即可解决问题。
● 看完代码随想录之后的想法
字母在ASCII里面都有对应的一个值,且26个字母对应的值是连续的,利用这一特点可以创建一个大小为26的数组分别对应表示a-z,这就是一个映射表,这题就可以使用哈希法,很神奇。
● 自己实现过程中遇到哪些困难
用分别查询记录字母和次数的思路有了,代码不会实现。
● 今日收获,记录一下自己的学习时长
(1.5小时)哈希法最主要就是创建一个映射表。
有几个函数需要了解:ord() sorted()
class Solution:
def isAnagram(self, s: str, t: str) -> bool:
record = [0] * 26
for i in s:
#并不需要记住字符a的ASCII,只要求出一个相对数值就可以了
record[ord(i) - ord("a")] += 1
for i in t:
record[ord(i) - ord("a")] -= 1
for i in range(26):
if record[i] != 0:
#record数组如果有的元素不为零0,说明字符串s和t 一定是谁多了字符或者谁少了字符。
return False
return True