跳至主要內容

剑指 Offer II 032. 有效的变位词

ITCharge大约 1 分钟

剑指 Offer II 032. 有效的变位词open in new window

  • 标签:哈希表、字符串、排序
  • 难度:简单

题目链接

题目大意

给定两个字符串 st

要求:判断 ts 是否使用了相同的字符构成(字符出现的种类和数目都相同,字符顺序不完全相同)。

解题思路

  1. 先判断字符串 st 的长度,不一样直接返回 False
  2. 如果 st 相等,则直接返回 False,因为变位词的字符顺序不完全相同;
  3. 分别遍历字符串 st。先遍历字符串 s,用哈希表存储字符串 s 中字符出现的频次;
  4. 再遍历字符串 t,哈希表中减去对应字符的频次,出现频次小于 0 则输出 False
  5. 如果没出现频次小于 0,则输出 True

代码

class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        if len(s) != len(t) or s == t:
            return False
        strDict = dict()
        for ch in s:
            if ch in strDict:
                strDict[ch] += 1
            else:
                strDict[ch] = 1
        for ch in t:
            if ch in strDict:
                strDict[ch] -= 1
                if strDict[ch] < 0:
                    return False
            else:
                return False
        return True