• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

python求解数组中两个字符串的最小距离

python 搞代码 4年前 (2022-01-07) 35次浏览 已收录 0个评论

这篇文章主要为大家详细介绍了python求解数组中两个字符串的最小距离,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

题目:

给定一个数组 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)

代码: 

 de

来源gao!%daima.com搞$代*!码网

f 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 return 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','*'] str1: 第一个字符串, '*' str2: 第二个字符串, '9' :return: 如果其中给定的一个字符串不在数组 strs 中,那么返回-1,否则返回两个字符串之间的最小间距 if str1 not in or str2 -1 0 create_hash(strs): # 创建 的过程并不在查询里 strs_set=list(set(strs)) dist_hash for i xrange(0, len(strs_set)): temp={} j 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 create_hash(strs)[str1][str2]

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持gaodaima搞代码网

以上就是python求解数组中两个字符串的最小距离的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:python求解数组中两个字符串的最小距离

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址