1、背景:

变位词指的是一个单词可以通过改变其他单词中字母的顺序来得到,也叫做兄弟单词,如army->mary。

题1:判断两个字符串s1和s2是否为变位词。

经典的字符串变位词检测问题是比较不同数量级函数算法的一个典型例子。如果一个字符串是 另一个字符串的重新排列组合,那么这两个字符串互为变位词。比如,”heart”与”earth”互为变位 词,”python”与”typhon”也互为变位词。为了简化问题,我们设定问题中的字符串长度相同,都是由 26 个小写字母组成。我们需要编写一个接受两个字符串,返回真假,代表是否是一对变位词的布尔 函数。

法①:检查标记【时间复杂度为O(n2)】

思路:检查第一个字符串中的所有字符是不是都在第二个字符串中出现。 如果能够把每一个字符都“检查标记”一遍,那么这两个字符串就互为变位词。检查标记一个字符 要用特定值 None 来代替,作为标记。然而,由于字符串不可变,首先要把第二个字符串转化成一个列表。第一个字符串中的每一个字符都可以在列表的字符中去检查,如果找到,就用 None 代替以示标记。

defanagram(s1,s2):

s2=list(s2)

still_ok=True

i=0while i

found=False

j=0while j

Found=Trueelse:

j+=1

iffound:

s2[j]==Noneelse:

still_ok=False

i+=1

return still_ok

法②:排序比较【时间复杂度为O(n2)】

思路:尽管 s1 和 s2 并不相同,但若为变位词它们一定包含完全一样的字符,利用这一特点,我们可以 采用另一种方法。我们首先从 a 到 z 给每一个字符串按字母顺序进行排序,如果它们是变位词,那么 我们将得到两个完全一样的字符串。此外,我们可以先将字符串转化为列表,再利用 Python 中内建

的 sort 方法对列表进行排序。下面代码展示了这种方法。

第一眼看上去你可能会认为这个算法的复杂度是 O(n),毕竟排序后只需要一个简单的循环去比较 n 个字符。然而对 Python 内建的 sort 方法的两次使用并非毫无消耗。事实上,正如我们在后面的章节 中将要看到的,排序方法的复杂度往往都是 O(n²)或者 O(n㏒n),所以排序贡献了这个函数主要的循 环操作。最终,这个算法和排序的复杂度相同。

defanagram(s1,s2):

s2=list(s2)

s1=list(s1)

list_s1=sorted(s1)

list_s2=sorted(s2)

still_ok=True

i=0while i

still_ok=Trueelse:

still_ok=False

i+=1

return still_ok

法③:计数比较法【时间复杂度O(n)】

解决变位词问题的最后一个方法利用了任何变位词都有相同数量的 a,相同数量的 b,相同数量 的 c 等等。为判断两个字符串是否为变位词,我们首先计算每一个字符在字符串中出现的次数。由于

共有 26 个可能的字符,我们可以利用有 26 个计数器的列表,每个计数器对应一个字符。每当我们 看到一个字符,就在相对应的计数器上加一。最终,如果这两个计数器列表相同,则这两个字符串 是变位词。下面展示了这种方法:

defanagram(s1,s2):

counter1=[0]*26counter2=[0]*26

for i ins1:

counter1[ord(i)-ord('a')]+=1

for i ins2:

counter2[ord(i)-ord('a')]+=1

if counter1==counter2:returnTrueelse:return False

浙大python判断两个字符串是否为变位词_算法2----------变位词相关推荐

  1. 浙大python判断两个字符串是否为变位词_python数据结构与算法 变位词

    变位词 问题简述 "变位词"判断问题:所谓 "变位词" 是指两个词之间存在组成字母的重新排列关系,例如 Heart 和 Earth,python 和 typho ...

  2. 浙大python判断两个字符串是否为变位词_Python实现对变位词的判断

    Python实现对变位词的判断 什么是变位词呢?即两个单词都是由相同的字母组成,而各自的字母顺序不同,譬如python和typhon,heart和earth. 变位词的判断 既然我们知道了变位词的定义 ...

  3. Python判断两个字符串是否为父子集

    两个问题的区别在于是否判断元素的数量 问题一:字符串s是否含有字符串t所有种类元素 实例一: s='a' t='aaa' print(set(t).issubset(set(s))) "&q ...

  4. python中如何判断两个字符串是否相等_python怎样判断两个字符串是否相同

    原标题:python怎样判断两个字符串是否相同 python中,判断两个字符串是否相等或一样,可以使用==或者is来判断:判断不一样可以使用 is not. 示例 使用注意事项 1.有时候两个字符串打 ...

  5. Python中判断两个字符串的内容是否相同

    1 前言 今天在划分数据集的时候,需要判断两个字符串的内容是否相同,这个之前查过,不过好像忘记了,所以想着再记录一下- 2 Python中判断两个字符串的内容是否相同 使用"==" ...

  6. Python字符串比较:如何判断两个字符串是否相等?

    Python字符串比较:如何判断两个字符串是否相等? 在Python编程中,字符串是最常用的数据类型之一.当我们需要比较两个字符串时,通常需要判断它们是否相等.这篇文章将详细介绍Python中比较两个 ...

  7. python判断字符串不相等_python怎么判断两个字符串不相等

    字符串操作是编程语言中经常用到的,常见的有字符串增.删.改.查.在python中,判断两个字符串是否相等或一样,可以使用==或者is来判断:判断不一样可以使用 is not. 示例 使用注意事项 1. ...

  8. Python判断两个文件夹中互相不同的文件有哪些、判断一个文件夹相对于另外一个文件夹缺少了哪些文件

    Python判断两个文件夹中互相不同的文件有哪些.判断一个文件夹相对于另外一个文件夹缺少了哪些文件 目录 Python判断两个文件夹中互相不同的文件有哪些.判断一个文件夹相对于另外一个文件夹缺少了哪些 ...

  9. 判断两个字符串是否是变形词

    问题: 给定两个字符串str1和str2,如果str1和str2中出现的字符种类一样并且每种字符出现的次数也一样,那么str1与str2互为变形词.请实现函数判断两个字符串是否互为变形词. 举例: s ...

最新文章

  1. 【深度学习】(4) 梯度下降、损失函数
  2. 阿里飞猪搜索技术的应用与创新
  3. 初识php异步多线程扩展swoole
  4. IIS+ASP+MySQL8.0+数据库连接解决方案(2019.7)
  5. cobbler 配置(转载)
  6. 无法创建接口的实例_什么是接口?
  7. python hack_Python进阶:深入GIL(上篇)
  8. func_get_args()获取一个函数的所有参数
  9. 9277用计算机,【资料】[转]鸿合电子白板学科通用工具使用技巧
  10. html中transition默认,CSS3中的Transition详解
  11. android虚拟机模糊,Android studio虚拟机在启动界面和桌面出现画面模糊花屏问题的解决方法...
  12. 一个复杂的nf_conntrack实例全景解析
  13. URLEncoder URLDecoder
  14. 7个顶级静态代码分析工具
  15. 继电保护整定值计算软件_继电保护整定计算软件
  16. 北京精雕现状_北京精雕科技有限公司怎么样?
  17. linux服务器架设篇 下载_后渗透系列——下载(Windows篇)
  18. java学习的第二个代码(飞行棋比赛-----龟兔赛跑),继上一个博客,对数组和Arrays的熟悉
  19. 解决windows 10下文件名太长无法删除的问题
  20. 超市会员管理系统 code

热门文章

  1. instanceof java_Java中的instanceof关键字
  2. 程序解释器忽略不执行的代码部分_编译器和解释器各有什么特点与区别
  3. golang byte转string_golang面试题:怎么避免内存逃逸?
  4. java基础知识总结(4)
  5. Keil5.15版本号
  6. Ubuntu install mysql
  7. 使用C语言在Win控制台中输出带颜色的文字
  8. C#基础学习第一天(.net菜鸟的成长之路-零基础到精通)
  9. 关于.NET内存中的堆和栈
  10. 30 秒速成好莱坞黑客 -- 在 Linux 终端中伪造好莱坞黑客屏幕