查找排序算法联系题

一 给定两个字符串s和t,判断t是否为s的重新排列后组成的单词

  • s = "anagram", t = "nagaram", return True
  • s = "rat", t = "car", return False
  • leetcode地址:https://leetcode.com/problems/valid-anagram/description/

解法一:排序,O(n*logn)

class Solution:
    def isAnagram(self, s, t):
        """
        :type s: str
        :type t: str
        :rtype: bool
        """
        ss = list(s)
        tt = list(t)
        ss.sort()
        tt.sort()
        return ss == tt
"""
输入:"anagram"、"nagaram"
输出:true
Runtime: 32 ms
"""

排序方法简写如下:

class Solution:
    def isAnagram(self, s, t):
        return sorted(list(s)) == sorted(list(t))

解法二:判断字母数量一致,时间复杂度O(n)

class Solution:
    def isAnagram(self, s, t):
        """
        :type s: str
        :type t: str
        :rtype: bool
        """
        dict1 = {}   # 用字典来维护字符的数量
        dict2 = {}
        for ch in s:
            dict1[ch] = dict1.get(ch, 0) + 1   # 没有就新建,有就加1
        for ch in t:
            dict2[ch] = dict2.get(ch, 0) + 1
        return dict1 == dict2
 
"""
输入:"anagram","nagaram"
输出:true
Runtime: 32 ms
"""

猜你喜欢

转载自www.cnblogs.com/harryblog/p/10751796.html