问题
给定两个字符串 str1 和 str2,如果 str1 和 str2 中出现的字符种类一样且每种字符出现的次数也一样,那么 str1 与 str2 互为变形词。请实现函数判断两个字符串是否互为变形词。
【举例】
str1="123",str2="231",返回 true。str1="123",str2="2331",返回 false。
回答
- @reynd Python3
1 | def isAnagram(self, s: str, t: str) -> bool: |
主要利用了 set 的内置优化和特性减少运算,以及使用布尔运算提高效率。
执行用时 : 48 ms, 在所有 Python3 提交中击败了 98.93% 的用户
内存消耗 : 14 MB, 在所有 Python3 提交中击败了 29.70% 的用户
- @bob C++
如果字符串 str1 和 str2 长度不同,直接返回 false。
如果长度相同,假设出现字符的编码值在 0~255 之间,那么先申请一个长度为 256 的
整型数组 map,map[a]=b
代表字符编码为 a 的字符出现了 b 次,初始时 map[0-255]的值都是 0。
然后遍历字符串 str1, 统计每种字符出现的数量,比如遍历到字符 ‘a’,其编码值为 97,则令 map[97]++
。这样 map 就成了 str1 中每种字符的词频统计表。
然后遍历字符串 str2,每遍历到一个字符,都在 map 中把词频减下来,比如遍历到字符 ‘a’,其编码值为 97,则令 map[97]--
,如果减少之后的值小于 0,直接返回 false。
如果遍历完 str2,map 中的值也没出现负值,则返回 true。