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 相关文章推荐
50行代码实现贪吃蛇(具体思路及代码)
Apr 27 Python
windows下Python实现将pdf文件转化为png格式图片的方法
Jul 21 Python
python中MethodType方法介绍与使用示例
Aug 03 Python
使用python实现http及ftp服务进行数据传输的方法
Oct 26 Python
Python3网络爬虫中的requests高级用法详解
Jun 18 Python
对Python中class和instance以及self的用法详解
Jun 26 Python
对Python中小整数对象池和大整数对象池的使用详解
Jul 09 Python
python数组循环处理方法
Aug 26 Python
Python面向对象封装操作案例详解
Dec 31 Python
python 使用多线程创建一个Buffer缓存器的实现思路
Jul 02 Python
利用python实现后端写网页(flask框架)
Feb 28 Python
pip/anaconda修改镜像源,加快python模块安装速度的操作
Mar 04 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
JoshChen_web格式编码UTF8-无BOM的小细节分析
2013/08/16 PHP
php 中文字符串首字母的获取函数分享
2013/11/04 PHP
使用PHP静态变量当缓存的方法
2013/11/13 PHP
Javascript YUI 读码日记之 YAHOO.util.Dom - Part.2 0
2008/03/22 Javascript
JavaScript异步编程:异步数据收集的具体方法
2013/08/19 Javascript
JavaScript控制网页平滑滚动到指定元素位置的方法
2015/04/17 Javascript
浅谈JavaScript 中有关时间对象的方法
2016/08/15 Javascript
JSON 必知必会 观后记
2016/10/27 Javascript
jQuery Mobile和HTML5开发App推广注册页
2016/11/07 Javascript
jQuery UI 实例讲解 - 日期选择器(Datepicker)
2017/09/18 jQuery
vue-cli 3.x 配置Axios(proxyTable)跨域代理方法
2018/09/19 Javascript
解决JQuery的ajax函数执行失败alert函数弹框一闪而过问题
2019/04/10 jQuery
详解如何运行vue项目
2019/04/15 Javascript
Vue实现push数组并删除的例子
2019/11/01 Javascript
使用 Vue-TCB 快速在 Vue 应用中接入云开发的方法
2020/02/10 Javascript
[01:08:30]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant BO3 第一场 2月28日
2021/03/11 DOTA
Python的__builtin__模块中的一些要点知识
2015/05/02 Python
Python 创建新文件时避免覆盖已有的同名文件的解决方法
2018/11/16 Python
python 与服务器的共享文件夹交互方法
2018/12/27 Python
linux查找当前python解释器的位置方法
2019/02/20 Python
Python深拷贝与浅拷贝用法实例分析
2019/05/05 Python
Python基于机器学习方法实现的电影推荐系统实例详解
2019/06/25 Python
linux环境中没有网络怎么下载python
2019/07/07 Python
Python如何优雅获取本机IP方法
2019/11/10 Python
python 多进程队列数据处理详解
2019/12/23 Python
ProBikeKit新西兰:自行车套件,跑步和铁人三项装备
2017/04/05 全球购物
为什么需要版本控制?
2013/08/08 面试题
宣传策划类求职信范文
2014/01/31 职场文书
喜之郎果冻广告词
2014/03/20 职场文书
公务员诚信承诺书
2014/05/26 职场文书
2014年房产销售工作总结
2014/12/08 职场文书
先进个人事迹材料范文
2014/12/30 职场文书
幼儿园教师师德承诺书
2015/04/28 职场文书
2015年妇产科工作总结
2015/05/18 职场文书
共青团优秀团员申请书(范文)
2019/08/15 职场文书
python中的3种定义类方法
2021/11/27 Python