python - 子字符串可以重新排列以匹配另一个字符串
问题描述
我正在尝试一个 CodeWars 问题,它需要创建一个函数,如果可以重新排列True
部分字符以匹配,则返回该函数。我的代码如下:str1
str2
False
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 个字符的字符串,所以我想知道是否有更好的方法来做到这一点。
解决方案
首先,您的代码不起作用;它不能正确处理重复项。其次,它很慢,因为您使用了O(n*m))算法:您检查一个字符串的每个字符是否包含在其他字符串的列表中。
一些提示:
不要从字符串中创建新列表;只需遍历字符串。
for char in str2:
将完成这项工作。
只检查一次 str1 中的字符。一个好方法是计算每个字符的数量,这样你就有了一个“库存”。你可以用字典来做到这一点。更好的是,使用 collections.Counter 对象。
如果您清点两个字符串中的字符,您可以简单地比较它们;如果每个 charstr2
不比 char in 更频繁str1
,则返回成功。
推荐阅读
- python - 如何从 Python 中的普通类调用蜘蛛类?
- sql - 如何从预生成的表中插入外键?
- linux - 无法链接到 Qt 5.9.2,CMake 总是链接到安装的系统 5.5.1
- mapbox - Mapbox GL JS 从默认标记更改颜色
- docker - Docker Linux 挂载代码是 RO
- express - 同一域上的 HTTPS 和 Websocket API 端点
- scala - 从 spark scala 中的数据集创建 json 文件
- swift - 为什么我的标签文本在重用注释视图时没有改变 mapkit swift 4
- reactjs - React/Webpack assets/bundle/app not found
- javascript - 如何在异步调用期间更新 DOM