题目描述:写出一个函数 anagram(s, t) 判断两个字符串是否可以通过改变字母的顺序变成一样的字符串。
样例:
给出 s = "abcd",t="dcab",返回 true.
给出 s = "ab", t = "ab", 返回 true.
给出 s = "ab", t = "ac", 返回 false.
根据题意,所谓“变位词”就是说两点:
1. 两个字符串各自所拥有的字符种类完全一样(比如,都拥有"a", "b", "c","d", 且只拥有"a", "b", "c","d")。
2. 每种字符在每个字符串中出现的个数都一样。
之前有一道“比较字符串”的问题(详见:点击打开链接),那个题里面,我们用了哈希表来解决判断两个字符串是否是包含关系。
这道题跟“比较字符串”一样,都可以使用这种方法。所以我不详细讲了,不会的请打开前面给出的链接。
还是用哈希表来存储其中一个字符串的字符以及相应的个数,再遍历另一个字符串,对已经生成的哈希表检查。
代码如下:
<pre name="code" class="python">class Solution:
"""
@param s: The first string
@param b: The second string
@return true or false
"""
def anagram(self, s, t):
hash_table = {}
for i in s:
if i not in hash_table:
hash_table[i] = 1
else:
hash_table[i] += 1
for i in t:
if i not in hash_table:
return False
else:
hash_table[i] -= 1
if hash_table[i] == 0:
hash_table.pop(i)
return hash_table == {}
# write your code here
需要注意的是20行删除键值对的操作,使得第一个字符串的每一个字符被“抵消”之后,就不存在了,这样,两个字符串如果是变位词,那么最后这个hash表一定为空。