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新手入门最容易犯的错误总结
Apr 24 Python
python+splinter自动刷新抢票功能
Sep 25 Python
Python列表切片操作实例总结
Feb 19 Python
Python用字典构建多级菜单功能
Jul 11 Python
python opencv捕获摄像头并显示内容的实现
Jul 11 Python
如何在Cloud Studio上执行Python代码?
Aug 09 Python
python实现简单图书管理系统
Nov 22 Python
PyTorch学习:动态图和静态图的例子
Jan 06 Python
Python 解析pymysql模块操作数据库的方法
Feb 18 Python
Django多数据库配置及逆向生成model教程
Mar 28 Python
使用python采集Excel表中某一格数据
May 14 Python
python按顺序重命名文件并分类转移到各个文件夹中的实现代码
Jul 21 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
Ajax+PHP边学边练 之五 图片处理
2009/12/03 PHP
Destoon实现多表查询示例
2014/08/21 PHP
一个非常完美的读写ini格式的PHP配置类分享
2015/02/12 PHP
再推荐十款免费的php开发工具
2015/11/09 PHP
javascript Array数组对象的扩展函数代码
2010/05/22 Javascript
jQuery powerFloat万能浮动层下拉层插件使用介绍
2010/12/27 Javascript
Node.js和PHP根据ip获取地理位置的方法
2014/03/14 Javascript
jQuery实现鼠标滚轮动态改变样式或效果
2015/01/05 Javascript
JS实现控制表格只显示行边框或者只显示列边框的方法
2015/03/31 Javascript
jQuery使用animate创建动画用法实例
2015/08/07 Javascript
不依赖Flash和任何JS库实现文本复制与剪切附源码下载
2015/10/09 Javascript
JS实现的手机端精简幻灯片效果
2016/09/05 Javascript
jQuery实现图片轮播效果代码
2016/09/27 Javascript
javascript代码调试之console.log 用法图文详解
2016/09/30 Javascript
angularJS模态框$modal实例代码
2017/05/27 Javascript
Jquery中attr与prop的区别详解
2017/05/27 jQuery
Bootstrap + AngularJS 实现简单的数据过滤字符查找功能
2017/07/27 Javascript
JavaScript事件处理程序详解
2017/09/19 Javascript
解决Angular4项目部署到服务器上刷新404的问题
2018/08/31 Javascript
在vue中使用echars实现上浮与下钻效果
2019/11/08 Javascript
JS操作JSON常用方法(10w阅读)
2020/12/06 Javascript
[48:37]EG vs OG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
Python实现霍夫圆和椭圆变换代码详解
2018/01/12 Python
tensorflow实现加载mnist数据集
2018/09/08 Python
在mac下查找python包存放路径site-packages的实现方法
2018/11/06 Python
PyCharm设置每行最大长度限制的方法
2019/01/16 Python
python实现倒计时小工具
2019/07/29 Python
Python利用多线程同步锁实现多窗口订票系统(推荐)
2019/12/22 Python
python 实现从高分辨图像上抠取图像块
2020/01/02 Python
pycharm无法导入本地模块的解决方式
2020/02/12 Python
python实现粒子群算法
2020/10/15 Python
Python用dilb提取照片上人脸的示例
2020/10/26 Python
python爬虫利器之requests库的用法(超全面的爬取网页案例)
2020/12/17 Python
美国照明、家居装饰和家具购物网站:Bellacor
2017/09/20 全球购物
英国领先的杂志订阅网站:Magazine.co.uk
2018/01/25 全球购物
C语言笔试题回忆
2015/04/02 面试题