首页 > 解决方案 > 子字符串可以重新排列以匹配另一个字符串

问题描述

我正在尝试一个 CodeWars 问题,它需要创建一个函数,如果可以重新排列True部分字符以匹配,则返回该函数。我的代码如下:str1str2False

def scramble(str1, str2):
    l = list(str2)
    le = len(str2)
    count = 0
    for i in l:
        if i in str1:
            count+=1 
        else:
            count = count
    return True if count == le else False

我似乎没有通过性能测试来测试两个最多 600000 个字符的字符串,所以我想知道是否有更好的方法来做到这一点。

标签: pythonstring

解决方案


首先,您的代码不起作用;它不能正确处理重复项。其次,它慢,因为您使用了O(n*m))算法:您检查一个字符串的每个字符是否包含在其他字符串的列表中。

一些提示:

不要从字符串中创建新列表;只需遍历字符串。

for char in str2:

将完成这项工作。

只检查一次 str1 中的字符。一个好方法是计算每个字符的数量,这样你就有了一个“库存”。你可以用字典来做到这一点。更好的是,使用 collections.Counter 对象。

如果您清点两个字符串中的字符,您可以简单地比较它们;如果每个 charstr2不比 char in 更频繁str1,则返回成功。


推荐阅读