python 判断串口是否被占用_python面试——实现一个函数判断字符串A和字符串B是否相似(CloudIn(云英)面经)...

7367880fcb0858b4556538ac244e56d3.png
# 原文出处:https://www.cnblogs.com/lianghui-lianghui/articles/10233736.html


# 定义字符串A和B为相似,当且仅当A和B中所有字符出现的次数均相等时,说明字符串A和字符串B相似
# 请实现一个函数判断为A和B是否相似,例如 : "aac"和"caa"相似,但"aac"和"caab"不相似


# 方法一
def same(s1, s2):
    d1 = {}
    d2 = {}
    # 以字典key-value的形式统计字符串中每个字符出现的次数
    for i in s1:
        # setdefault()方法,接收两个参数,一个是key,一个是默认值
        res1 = d1.setdefault(i, 0)  # 如果key i在字典d1中不存在,那么返回默认值0;如果存在,则返回key i在字典d1中的值
        res1 += 1                   # 递增key i出现的次数
        d1[i] = res1                # 将key i 和 value res 添加到字典di中

    for j in s2:
        res2 = d2.setdefault(j, 0)
        res2 += 1
        d2[j] = res2

    return d1 == d2

s1 = "abc"
s2 = "cba"
print(same(s1, s2))


# 优化方法一
def str2dict(s):
    d = {}
    for i in s:
        res = d.setdefault(i, 0)
        res += 1
        d[i] = res
    return d


def same(s1, s2):
    return str2dict(s1) == str2dict(s2)


s1 = "anagram"
s2 = "nagaram"

print(same(s1, s2))


# 方法二
# 使用Counter类,Counter类可以统计字符串中每个字符出现的次数
from collections import Counter

s1 = "aac"
s2 = "caa"

print(Counter(s1))                  # 输出:Counter({'a': 2, 'c': 1})
print(Counter(s2))                  # 输出:Counter({'a': 2, 'c': 1})
print(Counter(s1) == Counter(s2))   # 输出:True
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值