python求解数组中两个字符串的最小距离


Posted in Python onSeptember 27, 2018

题目:

给定一个数组 strs,其中的数据都是字符串,给定两个字符串 str1,str2。如果这两个字符串都在 strs数组中,就返回它们之间的最小距离;如果其中任何一个不在里面,则返回 -1;如果两个字符串相等,则返回 0。

例如:给定[‘*','3','*','5','10','9','7','1','*'],再给定两个字符串'* ‘和'9',通过函数求得返回值 3。

分析:有两种方法

方法1:

遍历数组 strs,分别记录两个 str1 和 str2 的位置。求得最小的一个距离数字。这样做时间复杂度为 o(n^2)。

方法2: 

如果查询的次数非常多,为了提高查询的效率,构造Hash表,把每次查询的时间复杂度下降到 o(1)。 
Python 的内置 dict 类型就是哈希表,实现方法也是hash 表,其查询的时间复杂度就是 o(1)。哈希表的构造也分很多种: 
比如,构造 Hash 表,key值是strs中的每一个字符串,value值是一个hash表,里面存放着该字符串到其它字符串的最小距离。 
写成代码就是:hash_table = {“*”:{“3”:1, “5”:1, “10”:2, “9”:3, “7”:2, “1”:1}} 
当然这种方法的空间复杂度是 o(n^2)

代码: 

def min_distance_1(strs, str1, str2):
  '''
  数组中两个字符串的最小距离,这是方法1,时间复杂度 o(n^2)
  :param strs: 给定的数组中存放有多个字符串
  :param str1: 第一个字符串
  :param str2: 第二个字符串
  :return: 如果其中给定的一个字符串不在数组 strs 中,那么返回-1,否则返回两个字符串之间的最小间距
  '''
  if str1 not in strs or str2 not in strs:
   return -1
  if str1 == str2:
   return 0
  dist, min = 1, len(strs)
  pos1, pos2 = 0, len(strs)
  for i in xrange(0, len(strs)):
   if str1 == strs[i]:
    pos1 = i
    for j in xrange(0, len(strs)):
     if str2 == strs[j]:
      pos2 = j
     dist = abs(pos1 - pos2)
     if dist < min:
      min = dist
  return min

 def min_distance_2(strs, str1, str2):
  '''
  数组中两个字符串的最小距离,这是方法2,如果查询的次数非常多,把每次查询的时间复杂度下降到 o(1)。
  Python 的内置 dict 类型就是哈希表,实现方法也是hash 表,其查询的时间复杂度就是 o(1)。哈希表的构造也分很多种:
  比如,构造 Hash 表,key值是strs中的每一个字符串,value值是一个hash表,里面存放着该字符串到其它字符串的最小距离。
   写成代码就是:hash_table = {"*":{"3":1, "5":1, "10":2, "9":3, "7":2, "1":1}}
  当然这种方法的空间复杂度是 o(n^2)
  :param strs: 给定的数组中存放有多个字符串['*','3','*','5','10','9','7','1','*']
  :param str1: 第一个字符串, '*'
  :param str2: 第二个字符串, '9'
  :return: 如果其中给定的一个字符串不在数组 strs 中,那么返回-1,否则返回两个字符串之间的最小间距
  '''
  if str1 not in strs or str2 not in strs:
   return -1
  if str1 == str2:
   return 0

  def create_hash(strs): # 创建 hash 的过程并不在查询里
   strs_set = list(set(strs))
   dist_hash = {}
   for i in xrange(0, len(strs_set)):
    temp = {}
    for j in xrange(0, len(strs_set)):
     if strs_set[i] != strs_set[j]:
      dist = min_distance_1(strs, strs_set[i], strs_set[j])
      temp[strs_set[j]] = dist
    dist_hash[strs_set[i]] = temp
   return dist_hash

  return create_hash(strs)[str1][str2]

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

Python 相关文章推荐
在Heroku云平台上部署Python的Django框架的教程
Apr 20 Python
Python中用sleep()方法操作时间的教程
May 22 Python
python中import学习备忘笔记
Jan 24 Python
Python基于socket实现简单的即时通讯功能示例
Jan 16 Python
python matplotlib绘图,修改坐标轴刻度为文字的实例
May 25 Python
Scrapy框架爬取Boss直聘网Python职位信息的源码
Feb 22 Python
Python循环中else,break和continue的用法实例详解
Jul 11 Python
django 微信网页授权登陆的实现
Jul 30 Python
python制作英语翻译小工具代码实例
Sep 09 Python
YUV转为jpg图像的实现
Dec 09 Python
提升python处理速度原理及方法实例
Dec 25 Python
Python经常使用的一些内置函数
Apr 11 Python
Python开发的十个小贴士和技巧及长常犯错误
Sep 27 #Python
详解django中使用定时任务的方法
Sep 27 #Python
Python高级特性切片(Slice)操作详解
Sep 27 #Python
Python初学者需要注意的事项小结(python2与python3)
Sep 26 #Python
使用 Python 实现微信群友统计器的思路详解
Sep 26 #Python
APIStar:一个专为Python3设计的API框架
Sep 26 #Python
Linux系统(CentOS)下python2.7.10安装
Sep 26 #Python
You might like
php实现的Timer页面运行时间监测类
2014/09/24 PHP
常用PHP框架功能对照表
2014/10/23 PHP
PHP+Javascript实现在线拍照功能实例
2015/07/18 PHP
PHP针对字符串开头和结尾的判断方法
2016/07/11 PHP
PHP设计模式之抽象工厂模式实例分析
2019/03/25 PHP
tp5修改(实现即点即改)
2019/10/18 PHP
Javascript代码混淆综合解决方案-Javascript在线混淆器
2006/12/18 Javascript
js监听输入框值的即时变化onpropertychange、oninput
2011/07/13 Javascript
使用jQuery避免鼠标双击的解决方案
2013/08/21 Javascript
了不起的node.js读书笔记之mongodb数据库交互
2014/12/22 Javascript
基于jQuery创建鼠标悬停效果的方法
2015/03/07 Javascript
JS实现向表格行添加新单元格的方法
2015/03/30 Javascript
javascript实现省市区三级联动下拉框菜单
2015/11/17 Javascript
全面解析Bootstrap表单样式的使用
2016/09/09 Javascript
原生JS仿QQ阅读点击展开、收起效果
2017/03/08 Javascript
中高级前端必须了解的JS中的内存管理(推荐)
2019/07/04 Javascript
JavaScript 作用域实例分析
2019/10/02 Javascript
node爬取新型冠状病毒的疫情实时动态
2020/02/06 Javascript
Python实现计算圆周率π的值到任意位的方法示例
2018/05/08 Python
详解配置Django的Celery异步之路踩坑
2018/11/25 Python
python并发编程多进程 互斥锁原理解析
2019/08/20 Python
Python模块汇总(常用第三方库)
2019/10/07 Python
python torch.utils.data.DataLoader使用方法
2020/04/02 Python
python适合做数据挖掘吗
2020/06/16 Python
python爬虫中采集中遇到的问题整理
2020/11/27 Python
python 用Matplotlib作图中有多个Y轴
2020/11/28 Python
BeautifulSoup中find和find_all的使用详解
2020/12/07 Python
加拿大知名的国际儿童品牌:Hatley
2016/11/09 全球购物
马来西亚最大的电器网站:Senheng
2017/10/13 全球购物
Under Armour瑞典官方网站:美国高端运动科技品牌
2018/11/21 全球购物
几个数据库方面的面试题
2016/07/01 面试题
中软国际Java程序员笔试题
2014/07/19 面试题
学校门卫管理制度
2014/01/30 职场文书
2015年扶贫帮困工作总结
2015/05/20 职场文书
班级班风口号大全
2015/12/25 职场文书
JavaScript组合继承详解
2021/11/07 Javascript