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 相关文章推荐
Python3实现从指定路径查找文件的方法
May 22 Python
Python实现获取域名所用服务器的真实IP
Oct 25 Python
详解JavaScript编程中的window与window.screen对象
Oct 26 Python
尝试用最短的Python代码来实现服务器和代理服务器
Jun 23 Python
pycharm 将django中多个app放到同个文件夹apps的处理方法
May 30 Python
基于python3实现socket文件传输和校验
Jul 28 Python
[原创]Python入门教程5. 字典基本操作【定义、运算、常用函数】
Nov 01 Python
Python连接字符串过程详解
Jan 06 Python
Mac PyCharm中的.gitignore 安装设置教程
Apr 16 Python
pycharm 实现光标快速移动到括号外或行尾的操作
Feb 05 Python
Python3.9.1中使用match方法详解
Feb 08 Python
Python中异常处理用法
Nov 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 验证码(倾斜,正弦干扰线,黏贴,旋转)
2013/06/29 PHP
PHP加密解密类实例分析
2015/04/20 PHP
PHP数组的定义、初始化和数组元素的显示实现代码
2016/11/05 PHP
记录一次排查PHP脚本执行卡住的问题
2016/12/27 PHP
PHP实现类似于C语言的文件读取及解析功能
2017/09/01 PHP
Laravel 已登陆用户再次查看登陆页面的自动跳转设置方法
2019/09/30 PHP
Laravel数据库读写分离配置的方法
2019/10/13 PHP
javascript 事件查询综合 推荐收藏
2010/03/10 Javascript
不要在cookie中使用特殊字符的原因分析
2010/07/13 Javascript
JS中常用的输出方式(五种)
2016/06/12 Javascript
angular.extend方法的具体使用
2017/09/14 Javascript
Vue 2.5.2下axios + express 本地请求404的解决方法
2018/02/21 Javascript
JS实现的简单分页功能示例
2018/08/23 Javascript
详解vue通过NGINX部署在子目录或者二级目录实践
2018/09/03 Javascript
简述pm2常用命令集合及配置文件说明
2019/05/30 Javascript
详解vue实现坐标拾取器功能示例
2020/11/18 Vue.js
[58:37]Serenity vs Fnatic 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
python读写json文件的简单实现
2017/04/11 Python
Python闭包之返回函数的函数用法示例
2018/01/27 Python
pandas 小数位数 精度的处理方法
2018/06/09 Python
python3对拉勾数据进行可视化分析的方法详解
2019/04/03 Python
tensorflow 20:搭网络,导出模型,运行模型的实例
2020/05/26 Python
Jmeter HTTPS接口测试证书导入过程图解
2020/07/22 Python
python开发入门——set的使用
2020/09/03 Python
奢华时尚的独特视角:La Garçonne
2018/06/07 全球购物
售后服务科岗位职责范文
2013/11/13 职场文书
职称评定自我鉴定
2014/03/18 职场文书
最新大学生创业计划书写作攻略
2014/04/02 职场文书
社区先进事迹材料
2014/05/19 职场文书
党员承诺书格式
2014/05/21 职场文书
企业优秀员工事迹材料
2014/05/28 职场文书
韩语专业职业生涯规划范文:成功之路就在我们脚下
2014/09/11 职场文书
2014年社区矫正工作总结
2014/11/18 职场文书
2015年公路养护工作总结
2015/05/13 职场文书
雷锋的观后感
2015/06/10 职场文书
python实现层次聚类的方法
2021/11/01 Python