两个字符串是变位词

题目描述:写出一个函数 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表一定为空。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值