python实现对变位词的判断方法


Posted in Python onApril 05, 2020

Python实现对变位词的判断,供大家参考,具体内容如下

什么是变位词呢?即两个单词都是由相同的字母组成,而各自的字母顺序不同,譬如python和typhon,heart和earth。

变位词的判断

既然我们知道了变位词的定义,那么接下来就是实现对两个单词是否是变位词进行判断了,以下展示变位词判断的几种解法:

1、逐字检查

将单词1中的所有字符逐个到单词2中检查是否存在对应字符,存在就标记
实现:将词2中存在的对应字符设置None,由于字符串是不可变类型,需要先将词2字符复制到列表中
时间复杂度:O(n^2)

def anagramSolution1(s1,s2):
 alist = list(s2) # 复制s2
 pos1 = 0
 stillok = True
 while pos1 < len(s1) and stillok: # 循环s1的所有字符
  pos2 = 0
  found = False  # 初始化标识符
  while pos2 < len(alist) and not found:  # 与s2的字符逐个对比
   if s1[pos1] == alist[pos2]:
    found = True
   else:
    pos2 = pos2 + 1
  if found:
   alist[pos2] = None # 找到对应,标记
  else:
   stillok = False # 没有找到,失败
  pos1 = pos1 + 1
 return stillok
print(anagramSolution1('python','typhon'))

2、排序比较

实现:将两个字符串都按照字母顺序重新排序,再逐个比较字符是否相同
时间复杂度:O(n log n)

def anagramSolution2(s1,s2):
 alist1 = list(s1)
 alist2 = list(s2)

 alist1.sort()   # 对字符串进行顺序排序
 alist2.sort()
 pos = 0
 matches = True
 while pos < len(s1) and matches:
  if alist1[pos] == alist2[pos]:  # 逐个对比
   pos = pos + 1
  else:
   matches = False
 return matches
print(anagramSolution2('python','typhon'))

3、穷尽法

将s1的字符进行全排列,再查看s2中是否有对应的排列
时间复杂度为n的阶乘,不适合作为解决方案

4、计数比较

将两个字符串的字符出现的次数分别统计,进行比较,看相应字母出现的次数是否一样
时间复杂度:O(n),从时间复杂度角度而言是最优解

def anagramSolution4(s1,s2):
 c1 = [0] * 26
 c2 = [0] * 26
 for i in range(len(s1)):
  pos = ord(s1[i]) - ord('a')  # ord函数返回字符的Unicode编码,此语句可以将字符串中的字母转换成0-25的数字
  c1[pos] = c1[pos] + 1  # 实现计数器
 for i in range(len(s2)):
  pos = ord(s2[i]) - ord('a')
  c2[pos] = c2[pos] + 1
 j = 0
 stillOK = True
 while j < 26 and stillOK:   # 计数器比较
  if c1[j] == c2[j]:
   j = j + 1
  else:
   stillOK = False
 return stillOK
print(anagramSolution4('python','typhon'))

总结

从以上几种解法可以看出,要想在时间上获得最优就需要牺牲空间存储,因此没有绝对的最优解,只有在一定的平衡下,才能找到一个问题相对稳定的解决方案。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python常用正则表达式符号浅析
Aug 13 Python
进一步了解Python中的XML 工具
Apr 13 Python
Python实现提取文章摘要的方法
Apr 21 Python
详解Python发送邮件实例
Jan 10 Python
Python 中的Selenium异常处理实例代码
May 03 Python
Django框架模板文件使用及模板文件加载顺序分析
May 23 Python
Python函数中参数是传递值还是引用详解
Jul 02 Python
python面试题之列表声明实例分析
Jul 08 Python
python字符串常用方法及文件简单读写的操作方法
Mar 04 Python
如何安装并在pycharm使用selenium的方法
Apr 30 Python
利用Python实现斐波那契数列的方法实例
Jul 26 Python
Python基于opencv的简单图像轮廓形状识别(全网最简单最少代码)
Jan 28 Python
python如何判断IP地址合法性
Apr 05 #Python
Python按照list dict key进行排序过程解析
Apr 04 #Python
Django高并发负载均衡实现原理详解
Apr 04 #Python
Django调用支付宝接口代码实例详解
Apr 04 #Python
基于python检查SSL证书到期情况代码实例
Apr 04 #Python
python zip,lambda,map函数代码实例
Apr 04 #Python
Python关键字及可变参数*args,**kw原理解析
Apr 04 #Python
You might like
discuz 首页四格:最新话题+最新回复+热门话题+精华文章插件
2007/08/19 PHP
php关联数组快速排序的方法
2015/04/17 PHP
PHP+JavaScript实现无刷新上传图片
2017/02/21 PHP
导航跟随滚动条置顶移动示例代码
2013/09/11 Javascript
分享12个实用的jQuery代码片段
2016/03/09 Javascript
js实现方块上下左右移动效果
2017/08/17 Javascript
解决vue 路由变化页面数据不刷新的问题
2018/03/13 Javascript
解决koa2 ctx.render is not a function报错问题
2018/08/07 Javascript
在iFrame子页面里实现模态框的方法
2018/08/17 Javascript
详解JavaScript中操作符和表达式
2018/09/12 Javascript
vue返回上一页面时回到原先滚动的位置的方法
2018/12/20 Javascript
浅谈一种让小程序支持JSX语法的新思路
2019/06/16 Javascript
解决vue的过渡动画无法正常实现问题
2019/10/31 Javascript
jQuery实现飞机大战小游戏
2020/07/05 jQuery
Vue-cli assets SubDirectory及PublicPath区别详解
2020/08/18 Javascript
浅谈vue.watch的触发条件是什么
2020/11/07 Javascript
Flexible.js可伸缩布局实现方法详解
2020/11/13 Javascript
python pdb调试方法分享
2014/01/21 Python
Python的ORM框架SQLObject入门实例
2014/04/28 Python
python根据出生日期返回年龄的方法
2015/03/26 Python
为什么Python中没有&quot;a++&quot;这种写法
2018/11/27 Python
Python实现读取txt文件中的数据并绘制出图形操作示例
2019/02/26 Python
Django中如何使用sass的方法步骤
2019/07/09 Python
Python企业编码生成系统总体系统设计概述
2019/07/26 Python
简单了解python协程的相关知识
2019/08/31 Python
Python List列表对象内置方法实例详解
2019/10/22 Python
python中使用paramiko模块并实现远程连接服务器执行上传下载功能
2020/02/29 Python
python基于exchange函数发送邮件过程详解
2020/11/06 Python
css3发光搜索表单分享
2014/04/11 HTML / CSS
利用CSS3的border-radius绘制太极及爱心图案示例
2016/05/17 HTML / CSS
canvas绘图按照contain或者cover方式适配并居中显示
2019/02/18 HTML / CSS
2013年办公室秘书的个人自我鉴定
2013/10/24 职场文书
党的群众路线教育实践活动个人对照检查材料(公安)
2014/11/05 职场文书
初一年级组工作总结
2015/08/12 职场文书
三八红旗手先进事迹材料(2016推荐版)
2016/02/25 职场文书
pycharm 如何查看某一函数源码的快捷键
2021/05/12 Python