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字典的常用操作方法小结
May 16 Python
django实现前后台交互实例
Aug 07 Python
python的继承知识点总结
Dec 10 Python
Python3.6中Twisted模块安装的问题与解决
Apr 15 Python
Python利用sqlacodegen自动生成ORM实体类示例
Jun 04 Python
python matplotlib库直方图绘制详解
Aug 10 Python
Python3从零开始搭建一个语音对话机器人的实现
Aug 23 Python
Python:合并两个numpy矩阵的实现
Dec 02 Python
pandas factorize实现将字符串特征转化为数字特征
Dec 19 Python
python 如何在 Matplotlib 中绘制垂直线
Apr 02 Python
Python词云的正确实现方法实例
May 08 Python
python创建字典及相关管理操作
Apr 13 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
PHP性能优化工具篇Benchmark类调试执行时间
2011/12/06 PHP
Drupal读取Excel并导入数据库实例
2014/03/02 PHP
ThinkPHP分组下自定义标签库实例
2014/11/01 PHP
基于Swoole实现PHP与websocket聊天室
2016/08/03 PHP
Laravel框架使用Seeder实现自动填充数据功能
2018/06/13 PHP
PHP Ajax跨域问题解决方案代码实例
2020/08/01 PHP
js onpropertychange输入框 事件获取属性
2009/03/26 Javascript
解决IE下select标签innerHTML插入option的BUG(兼容IE,FF,Opera,Chrome,Safari)
2010/05/13 Javascript
自编jQuery插件实现模拟alert和confirm
2014/09/01 Javascript
BootStrap智能表单实战系列(十一)级联下拉的支持
2016/06/13 Javascript
jQuery.ajax实现根据不同的Content-Type做出不同的响应
2016/11/03 Javascript
ES6概念 ymbol.for()方法
2016/12/25 Javascript
老生常谈js中的MVC
2017/07/25 Javascript
微信小程序调用摄像头隐藏式拍照功能
2018/08/22 Javascript
详解node字体压缩插件font-spider的用法
2018/09/28 Javascript
Nodejs 识别图片类型的方法
2019/08/15 NodeJs
jQuery实现每日秒杀商品倒计时功能
2019/09/06 jQuery
微信小程序跳转到其他网页(外部链接)的实现方法
2019/09/20 Javascript
Python中asyncore异步模块的用法及实现httpclient的实例
2016/06/28 Python
python数据封装json格式数据
2018/03/04 Python
python中使用iterrows()对dataframe进行遍历的实例
2018/06/09 Python
python requests post多层字典的方法
2018/12/27 Python
Django 用户登陆访问限制实例 @login_required
2020/05/13 Python
在python image 中实现安装中文字体
2020/05/16 Python
pytorch掉坑记录:model.eval的作用说明
2020/06/23 Python
jupyter notebook快速入门及使用详解
2020/11/13 Python
python uuid生成唯一id或str的最简单案例
2021/01/13 Python
numba提升python运行速度的实例方法
2021/01/25 Python
Born鞋子官网:Born Shoes
2017/04/06 全球购物
美国在线购物频道:Shop LC
2019/04/21 全球购物
继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么?
2015/11/18 面试题
阅兵口号
2014/06/19 职场文书
党的群众路线教育实践活动个人整改方案
2014/09/21 职场文书
2014年自愿离婚协议书范本
2014/09/25 职场文书
心理健康教育主题班会
2015/08/13 职场文书
上手简单,功能强大的Python爬虫框架——feapder
2021/04/27 Python