显示不同量级的算法的一个很好的例子是字符串的乱序检查。乱序字符串是指一个字符串只是另一个字符串的重新排列。例如,‘heart’ 和 ‘earth’ 就是乱序字符串。‘python’ 和 ‘typhon’ 也是。为了简单起见,我们假设所讨论的两个字符串具有相等的长度,并且他们由 26 个小写字母集合组成。我们的目标是写一个布尔函数,它将两个字符串做参数并返回它们是不是乱序。

解法一:

思路:将两个字符串都转化成列表,然后遍历其中一个,当前元素在另外一个列表中就把另一个列表的对应元素移除(防止重复干扰)。不存在就返回FALSE,遍历完成返回True

代码参考如下:

str1 = 'hagjen'
str2 = 'ahejng'
def foo(str1,str2):ls1 = list(str1)ls2 = list(str2)for i in ls1:if i in ls2:ls2.remove(i)else:return Falsereturn True
print(foo(str1,str2))

算法复杂度:两层for循环,都是和n线性相关,所以这个算法复杂度为 O(n^2 )。

解法二:

两个字符串也都转为列表,然后排序当排序后连个列表相等就返回True,否则FALSE

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
str1 = 'hagjen'
str2 = 'ahejng'
def foo(str1,str2):ls1 = list(str1).sort()ls2 = list(str2) .sort()return True if ls1==ls2 else False
print(foo(str1,str2))

算法复杂度:咋一看完全没有循环,复杂度好像非常低,但是别忘了排序!排序是python内部实现的,它也需要时间消耗,排序的算法复杂度一般是O(nlog(n)),O(n^2)。所以这种方法不一定比上面的好

解法三

建立两个长度为26的列表,分别遍历两个字符串,分别计数,最后两个列表相同就返回True

def foo(s1,s2):ls1 = list(s1)ls2 = list(s2)count1 = [0 for  i in range(26)]count2 = [0 for  i in range(26)]print(count1)print(count2)for  i in ls1:count1[ord(i)-ord('a')] +=1for  i in ls2:count2[ord(i)-ord('a')] +=1return True if count1==count2 else False
print(foo('aacf','cfaa'))

时间复杂度:由于没有循环嵌套也没有排序等算法,时间复杂度为2n+26,即O(n)

代码优化:

def is_simlar(s1, s2):from collections import Counterreturn Counter(s1) == Counter(s2)

对python乱序字符串检查算法研究相关推荐

  1. LintCode(M) 乱序字符串

    乱序字符串 描述 笔记 数据 评测 给出一个字符串数组S,找到其中所有的乱序字符串(Anagram).如果一个字符串是乱序字符串,那么他存在一个字母集合相同,但顺序不同的字符串也在S中. 注意事项 所 ...

  2. LeetCode/LintCode 题解丨一周爆刷字符串:乱序字符串

    描述 给出一个字符串数组S,找到其中所有的乱序字符串(Anagram). 如果一个字符串是乱序字符串,那么他存在一个字母集合相同. 但顺序不同的字符串也在S中. 所有的字符串都只包含小写字母. 点击查 ...

  3. “外星人”字符串生成算法研究

    为什么80%的码农都做不了架构师?>>>    今天看到 大虾 88250的灰色天空  在博客中提到"Hello world的N种写法"实在把我惊了一番,看来基本 ...

  4. 寻找相同的乱序字符串

    题目描述 输入两个字符串 s1,s2, s2 的顺序不小心被小明打乱了,小明无法辨认 s2 能否还原到 s1,你能帮他判断下吗, 如果能还原输出 yes,否则输出 no. 输入格式 第一行输入一个字符 ...

  5. python 乱序数组,list等有序结构的方法

    在Python中一般使用shuffle()这个函数使得有序的结构无序化. 使用的方法如下: 在这里需要在python 的文件中引入: from random import shuffle from r ...

  6. 根据乱序的英文单词构成数字

    2019独角兽企业重金招聘Python工程师标准>>> Reconstruct Original Digits from English 问题: Given a non-empty  ...

  7. lintcode-171-乱序字符串

    171-乱序字符串 给出一个字符串数组S,找到其中所有的乱序字符串(Anagram).如果一个字符串是乱序字符串,那么他存在一个字母集合相同,但顺序不同的字符串也在S中. 注意事项 所有的字符串都只包 ...

  8. python数据结构和算法 时间复杂度分析 乱序单词检测 线性数据结构 栈stack 字符匹配 表达式求值 queue队列 链表 递归 动态规划 排序和搜索 树 图

    python数据结构和算法 参考 本文github 计算机科学是解决问题的研究.计算机科学使用抽象作为表示过程和数据的工具.抽象的数据类型允许程序员通过隐藏数据的细节来管理问题领域的复杂性.Pytho ...

  9. 乱序字典加密解密python基础知识综合应用

    目标 找一段比较长的文本(文本是以.txt文件形式存在的) NOTE:频率法适用于较大样本 打开文件,读取字符形成字符串( python文件函数) 处理成只包含小写字母的字符串 (用re的函数) 统计 ...

最新文章

  1. 在Eclipse中生成API方法
  2. Datawhale-零基础入门NLP-新闻文本分类Task02
  3. C程序设计基础之多维数组的指针变量
  4. 【script】python使用pymssql模块访问SQL Server(Mssql)
  5. Oracle获取一年中的所有日期和一个月中的所有日期
  6. 关于python中的setup.py(转)
  7. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_07 缓冲流_3_BufferedInputStream_字节缓冲...
  8. 04、HI3518 sample_venc Makefile和源码分析
  9. python numpy安装失败_python 安装 numpy 教程及错误总结
  10. HTML制作用户登录界面
  11. 十年程序人生——黎活明给程序员的忠告
  12. 华为服务器型号分类,解析华为服务器
  13. java ftp 卡死_ftpclient卡死问题
  14. 2022/12/11创建openai账号(chatgpt)
  15. GB50016计算机房设计规定,为什么GB50016-2014《建筑设计防火规范》不包含防排烟系统实施规定?...
  16. PCIe5.0的Add-in-Card(AIC)金手指layout建议(三)
  17. Java高级之Float类和Double类的isNaN()方法
  18. Windows 2003安全设置大全----2003系统错误大全解释
  19. ar8161网卡 linux,解决AR8161网卡驱动的方法
  20. dnf加物理攻击的卡片有哪些_dnf物理攻击宝珠_dnf2019物理攻击宝珠大全_快吧游戏...

热门文章

  1. [Python爬虫] 之十二:Selenium +phantomjs抓取中的url编码问题
  2. 差分约束 【bzoj2330】[SCOI2011]糖果
  3. (转)Java中的private、protected、public和default的区别
  4. JS原生---鼠标拖拽
  5. 两页面之间 转发请求,传递参数
  6. linux下锐捷拨号的问题
  7. explain ref_你必须要掌握的MySQL命令:explain
  8. 【ABAP】ALV可编辑数据更新
  9. 【转载】看板方式简介
  10. 【超级实用】程序添加后台执行的选项