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

 

posted @ 2021-02-05 08:53  qilibin  阅读(105)  评论(0编辑  收藏  举报