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 相关文章推荐
Python 获取新浪微博的最新公共微博实例分享
Jul 03 Python
Python中的命令行参数解析工具之docopt详解
Mar 27 Python
CentOS中升级Python版本的方法详解
Jul 10 Python
Python实现替换文件中指定内容的方法
Mar 19 Python
Python 实现使用dict 创建二维数据、DataFrame
Apr 13 Python
实例讲解python中的协程
Oct 08 Python
对Python闭包与延迟绑定的方法详解
Jan 07 Python
一步步教你用python的scrapy编写一个爬虫
Apr 17 Python
python简单验证码识别的实现方法
May 10 Python
Django自带日志 settings.py文件配置方法
Aug 30 Python
python 命令行传入参数实现解析
Aug 30 Python
Django model重写save方法及update踩坑详解
Jul 27 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使用Pear发送邮件(Windows环境)
2016/01/05 PHP
php文件上传的两种实现方法
2016/04/04 PHP
PHP微信公众号开发之微信红包实现方法分析
2017/07/14 PHP
解决laravel-admin 自己新建页面里 js 需要刷新一次的问题
2019/10/03 PHP
javascript 面向对象编程基础:继承
2009/08/21 Javascript
javascript中&quot;/&quot;运算符常见错误
2010/10/13 Javascript
23个Javascript弹出窗口特效整理
2011/02/25 Javascript
js页面跳转的问题(跳转到父页面、最外层页面、本页面)
2013/08/14 Javascript
jQuery+ajax实现鼠标单击修改内容的方法
2014/06/27 Javascript
js给网页加上背景音乐及选择音效的方法
2015/03/03 Javascript
JS获取Table中td值的方法
2015/03/19 Javascript
jquery+ajax请求且带返回值的代码
2015/08/12 Javascript
JSON与XML的区别对比及案例应用
2016/11/11 Javascript
通过js修改input、select默认字体颜色
2017/04/19 Javascript
详解react使用react-bootstrap当轮子造车
2017/08/15 Javascript
Cropper.js 实现裁剪图片并上传(PC端)
2017/08/20 Javascript
vue 左滑删除功能的示例代码
2019/01/28 Javascript
vue实现可视化可拖放的自定义表单的示例代码
2019/03/20 Javascript
JS实现打字游戏
2019/12/17 Javascript
JavaScript中的this妙用实例分析
2020/05/09 Javascript
[54:09]RNG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
Python日期时间模块datetime详解与Python 日期时间的比较,计算实例代码
2018/09/14 Python
Python实现Dijkstra算法
2018/10/17 Python
Pandas中resample方法详解
2019/07/02 Python
Django 解决由save方法引发的错误
2020/05/21 Python
Python替换NumPy数组中大于某个值的所有元素实例
2020/06/08 Python
解决pytorch 数据类型报错的问题
2021/03/03 Python
基于CSS3实现的几个小loading效果
2018/09/27 HTML / CSS
Pedro官网:新加坡时尚品牌
2019/08/27 全球购物
JVM是一个编译程序还是解释程序
2012/09/11 面试题
高三自我鉴定范文
2013/10/19 职场文书
大学生毕业的自我鉴定
2013/11/13 职场文书
销售人员自我评价
2014/02/01 职场文书
淘宝好评语句大全
2014/12/31 职场文书
国家助学金感谢信
2015/01/21 职场文书
浅谈Redis的keys命令到底有多慢
2021/10/05 Redis