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 29 Python
Python抓取百度查询结果的方法
Jul 08 Python
python中如何使用正则表达式的集合字符示例
Oct 09 Python
python爬虫实例详解
Jun 19 Python
利用Python如何生成便签图片详解
Jul 09 Python
python 正确保留多位小数的实例
Jul 16 Python
详解python的四种内置数据结构
Mar 19 Python
python里 super类的工作原理详解
Jun 19 Python
python3应用windows api对后台程序窗口及桌面截图并保存的方法
Aug 27 Python
python生成器推导式用法简单示例
Oct 08 Python
Django框架下静态模板的继承操作示例
Nov 08 Python
Django 解决上传文件时,request.FILES为空的问题
May 20 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
CI框架整合widget(页面格局)的方法
2016/05/17 PHP
php使用ffmpeg向视频中添加文字字幕的实现方法
2016/05/23 PHP
Yii2实现跨mysql数据库关联查询排序功能代码
2017/02/10 PHP
Yii 2.0自带的验证码使用经验分享
2017/06/19 PHP
Thinkphp5结合layer弹窗定制操作结果页面
2017/07/07 PHP
js关于精确计算和数值格式化以及直接引js文件
2014/01/28 Javascript
关闭页面时window.location事件未执行的原因分析及解决方案
2014/09/01 Javascript
多个checkbox被选中时如何判断是否有自己想要的
2014/09/22 Javascript
JavaScript实现更改网页背景与字体颜色的方法
2015/02/02 Javascript
jQuery CSS3相结合实现时钟插件
2016/01/08 Javascript
深入理解jQuery layui分页控件的使用
2016/08/17 Javascript
Bootstrap源码解读网格系统(3)
2016/12/22 Javascript
基于JavaScript实现微信抢红包功能
2017/07/20 Javascript
babel之配置文件.babelrc入门详解
2018/02/22 Javascript
mpvue构建小程序的方法(步骤+地址)
2018/05/22 Javascript
详解JavaScript 新语法之Class 的私有属性与私有方法
2019/04/23 Javascript
Element InputNumber计数器的使用方法
2020/07/27 Javascript
antd table按表格里的日期去排序操作
2020/11/17 Javascript
Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】
2017/09/28 Python
Python学生成绩管理系统简洁版
2020/04/05 Python
将python图片转为二进制文本的实例
2019/01/24 Python
Python实现Mysql数据统计及numpy统计函数
2019/07/15 Python
浅谈python累加求和+奇偶数求和_break_continue
2020/02/25 Python
Python 多线程C段扫描、检测 Ping扫描脚本的实现
2020/09/03 Python
一款纯css3实现的漂亮的404页面的实例教程
2014/11/27 HTML / CSS
印度和世界各地的精美产品:Ikka Dukka
2018/02/12 全球购物
英国最大的在线亚洲杂货店:Red Rickshaw
2020/03/22 全球购物
项目资料员岗位职责
2013/12/10 职场文书
小学一年级评语大全
2014/04/22 职场文书
节约用水演讲稿
2014/05/21 职场文书
2014年党建工作汇报材料
2014/10/27 职场文书
2014教师评职称工作总结
2014/11/10 职场文书
2015年语文教研组工作总结
2015/05/23 职场文书
如何写新闻稿
2015/07/18 职场文书
Python中文纠错的简单实现
2021/07/07 Python
实现一个简单得数据响应系统
2021/11/11 Javascript