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

来源:互联网 发布:3tier数据 编辑:程序博客网 时间:2024/06/08 07:11

题目
给定两个字符串,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 的写法,请留言我。

原创粉丝点击