LeetCode242有效字母异位词
# coding:utf-8 """ Name : NO242.py Author : qlb Contect : 17801044486@163.com Time : 2021/2/5 8:08 Desc: 有效字母异位词 """ #解题思路 #有效字母异位词的条件有以下几个 #1 两个字符串长度相等 可以完全相同 #2 两个字符串B里面的每个字符都在A里面,排列顺序和A不同 #所以首先将A和B排序,如果A和B是有效字母异位词,那么将A和B排序之后,A和B是完全相同的,如果AB不是完全相同,则返回False class Solution: def isAnagram(self, s: str, t: str) -> bool: if len(s) == len(t): s = sorted(s) t = sorted(t) if s == t: return True else: return False else: return False test = Solution() res = test.isAnagram("abcdfgh","abcdfgh") print (res)
#解题思路2 #题目中说到字符只有小写字符 ,那么可以定义一个数组,来记录字符串s里面每个字符出现的次数,那么定义多大的数组呢 #由于只是小写字母 所以数组的长度为26 #如何把字符映射到数组上呢?因为字符a到字符z的ASCII是26个连续的数值,所以字符a映射为0,相应的字符z映射为下表25。 # 如何计算字母a的下标 ord('a') - ord('a') = 0 字符ss的下标为ord(ss) - ord('a') # 对于字符串s来说 只要出现某个字符ss 那么该字符对应的位置计数值加1 # 对于字符串t来说 只要出现某个字符tt 那么该字符对应的位置计数值减1 # 如果s和t是有效的字母异位词 那么最后记录字符出现次数的数组所有值均为0 class Solution2: def isAnagram(self, s: str, t: str) -> bool: countArray = [0]*26 if len(s) == len(t): for ss in s: countArray[ord(ss) - ord('a')] += 1 for tt in t: countArray[ord(tt) - ord('a')] -= 1 num_of_zero = countArray.count(0) # num_of_zero = 0 # for n in countArray: # if n == 0: # num_of_zero += 1 if num_of_zero == 26: return True else: return False else: return False