Python实现针对给定字符串寻找最长非重复子串的方法

 更新时间:2018年04月21日 11:37:46   作者:Together_CZ  
这篇文章主要介绍了Python实现针对给定字符串寻找最长非重复子串的方法,涉及Python针对字符串的遍历、排序、计算等相关操作技巧,需要的朋友可以参考下

本文实例讲述了Python实现针对给定字符串寻找最长非重复子串的方法。分享给大家供大家参考,具体如下:

问题:

给定一个字符串,寻找其中最长的重复子序列,如果字符串是单个字符组成的话如“aaaaaaaaaaaaa”那么满足要求的输出就是a

思路:

这里的思路有两种是我能想到的

(1)从头开始遍历字符串,设置标志位,在往后走的过程中当发现和之前标志位重合的时候就回头检查一下这个新出现的子串是否跟前面字符串或者前面字符串的子串相同,相同则记录该子串并计数加1,直至处理完毕

(2)利用滑窗切片的机制,生成所有的切片接下来统计和处理,主要利用到了两次排序的功能

本文采用的是第二种方法,下面是具体实现:

#!usr/bin/env python
#encoding:utf-8
'''''
__Author__:沂水寒城
功能:给定一个字符串,寻找最长重复子串
'''
from collections import Counter
def slice_window(one_str,w=1):
  '''''
  滑窗函数
  '''
  res_list=[]
  for i in range(0,len(one_str)-w+1):
    res_list.append(one_str[i:i+w])
  return res_list
def main_func(one_str):
  '''''
  主函数
  '''
  all_sub=[]
  for i in range(1,len(one_str)):
    all_sub+=slice_window(one_str,i)
  res_dict={}
  #print Counter(all_sub)
  threshold=Counter(all_sub).most_common(1)[0][1]
  slice_w=Counter(all_sub).most_common(1)[0][0]
  for one in all_sub:
    if one in res_dict:
      res_dict[one]+=1
    else:
      res_dict[one]=1
  sorted_list=sorted(res_dict.items(), key=lambda e:e[1], reverse=True)
  tmp_list=[one for one in sorted_list if one[1]>=threshold]
  tmp_list.sort(lambda x,y:cmp(len(x[0]),len(y[0])),reverse=True)
  #print tmp_list
  print tmp_list[0][0]
if __name__ == '__main__':
  print "脚本之家测试结果:"
  one_str='abcabcd'
  two_str='abcabcabd'
  three_str='bbbbbbb'
  main_func(one_str)
  main_func(two_str)
  main_func(three_str)

结果如下:

更多关于Python相关内容可查看本站专题:《Python字符串操作技巧汇总》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总

希望本文所述对大家Python程序设计有所帮助。

相关文章

  • python爬取淘宝商品销量信息

    python爬取淘宝商品销量信息

    这篇文章主要为大家详细介绍了python爬取淘宝商品的销量信息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • python模型集成知识点总结

    python模型集成知识点总结

    在本篇文章里小编给大家整理了一篇关于python模型集成知识点总结,有需要的朋友们可以学习参考下。
    2021-08-08
  • python使用mysqldb连接数据库操作方法示例详解

    python使用mysqldb连接数据库操作方法示例详解

    这篇文章主要介绍了python mysqldb使用方法,大家参考使用
    2013-12-12
  • Python实现单例模式的四种方法

    Python实现单例模式的四种方法

    在Python中实现单例模式,意味着一个类只能创建一个实例,单例模式在某些场景下非常有用,比如当你需要控制资源的访问,或者当你想确保全局只有一个对象实例时,本文给大家介绍了几种在Python中实现单例模式的方法,需要的朋友可以参考下
    2024-03-03
  • Pytorch训练模型得到输出后计算F1-Score 和AUC的操作

    Pytorch训练模型得到输出后计算F1-Score 和AUC的操作

    这篇文章主要介绍了Pytorch训练模型得到输出后计算F1-Score 和AUC的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • Python正则表达式中flags参数的实例详解

    Python正则表达式中flags参数的实例详解

    正则表达式是一个很强大的字符串处理工具,几乎任何关于字符串的操作都可以使用正则表达式来完成,下面这篇文章主要给大家介绍了关于Python正则表达式中flags参数的相关资料,需要的朋友可以参考下
    2022-04-04
  • python保留格式汇总各部门excel内容的实现思路

    python保留格式汇总各部门excel内容的实现思路

    这篇文章主要介绍了python保留格式汇总各部门excel内容,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • 详解pandas中利用DataFrame对象的.loc[]、.iloc[]方法抽取数据

    详解pandas中利用DataFrame对象的.loc[]、.iloc[]方法抽取数据

    这篇文章主要介绍了pandas中利用DataFrame对象的.loc[]、.iloc[]方法抽取数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Python基于辗转相除法求解最大公约数的方法示例

    Python基于辗转相除法求解最大公约数的方法示例

    这篇文章主要介绍了Python基于辗转相除法求解最大公约数的方法,结合实例形式分析了Python使用辗转相除法求解最大公约数的实现方法与优化操作技巧,需要的朋友可以参考下
    2018-04-04
  • Python实现简单猜数字游戏

    Python实现简单猜数字游戏

    这篇文章主要为大家详细介绍了Python实现猜数字游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-02-02

最新评论