判断两字符串是否互为变形词Python版

题目
给定两个字符串,str1,str2,判断两个字符串中出现的字符是否全部种类一样,数量一样。
例如:
str1 = “apple”, str2 = “paple”, 返回 True;
str1 = “pear”, str2 = “bears”, 返回 False。

Python版代码如下,我自己手写:

def is_deformation(str1, str2):
    if str1 is None or str2 is None or len(str1) != len(str2):
        return False
    i, map = 0, [0]
    while i <= 256:
        map.append(0)
        i += 1
    for i in range(0, len(str1)):
        map[ord(str1[i])] += 1
    for i in range(0, len(str2)):
        if map[ord(str2[i])] == 0:
            return False
    return True

解题思路
1、首先判断字符串长度是否一致,然后遍历str1,str2,假使字符数量为ASCII字符256个。一旦map中出现-1,返回报错。最后不需要再次遍历map中是否为全0,直接返回 True。
2、如果字符类型大大多于256,要采用哈希表
3、时间复杂度为两次遍历 str1,所以为 o(len(str1)),空间复杂度,申请了一个整形变量 i,一个map数组,所以空间复杂度为 o(len(map))。

体会
1、Python写算法感觉不如C好,Python里自带的 列表数据类型不方便初始化空数组,非得来一个循环才能解决问题。增加了时间复杂度。
2、Python的数组就是个链表,而非数组。灵活的链表结构,可以在此基础上构建树结构。

如果有更 pythonic 的写法,请留言我。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值