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


Posted in Python onApril 21, 2018

本文实例讲述了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使用os模块的os.walk遍历文件夹示例
Jan 27 Python
在Python中使用判断语句和循环的教程
Apr 25 Python
Python脚本实现自动发带图的微博
Apr 27 Python
11月编程语言排行榜 Python逆袭C#上升到第4
Nov 15 Python
python如何为创建大量实例节省内存
Mar 20 Python
详解Django解决ajax跨域访问问题
Aug 24 Python
Django之Mode的外键自关联和引用未定义的Model方法
Dec 15 Python
Python自定义一个异常类的方法
Jun 27 Python
Python爬虫动态ip代理防止被封的方法
Jul 07 Python
Python 中由 yield 实现异步操作
May 04 Python
python 下划线的不同用法
Oct 24 Python
详解python百行有效代码实现汉诺塔小游戏(简约版)
Oct 30 Python
Python 实现一行输入多个值的方法
Apr 21 #Python
Python实现接受任意个数参数的函数方法
Apr 21 #Python
深入分析python数据挖掘 Json结构分析
Apr 21 #Python
Python编程中NotImplementedError的使用方法
Apr 21 #Python
python 通过字符串调用对象属性或方法的实例讲解
Apr 21 #Python
python 限制函数调用次数的实例讲解
Apr 21 #Python
python装饰器-限制函数调用次数的方法(10s调用一次)
Apr 21 #Python
You might like
深入php内核之php in array
2015/11/10 PHP
再次更新!MSClass (Class Of Marquee Scroll通用不间断滚动JS封装类 Ver 1.6)
2007/02/05 Javascript
用js实现预览待上传的本地图片
2007/03/15 Javascript
jquery 缓存问题的几个解决方法
2013/11/11 Javascript
javascript打印html内容功能的方法示例
2013/11/28 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 图片库
2015/01/09 Javascript
jQuery自动添加表单项的方法
2015/07/13 Javascript
关于微信上网页图片点击全屏放大效果
2016/12/19 Javascript
Angularjs+bootstrap+table多选(全选)支持单击行选中实现编辑、删除功能
2017/03/27 Javascript
react-router实现跳转传值的方法示例
2017/05/27 Javascript
Canvas放置反弹效果随机图形(实例)
2017/08/17 Javascript
微信公众号H5支付接口调用方法
2019/01/10 Javascript
sortable+element 实现表格行拖拽的方法示例
2019/06/07 Javascript
详解Vue 换肤方案验证
2019/08/28 Javascript
layui 根据后台数据动态创建下拉框并同时默认选中的实例
2019/09/02 Javascript
js实现三角形粒子运动
2020/09/22 Javascript
python根据出生年份简单计算生肖的方法
2015/03/27 Python
python清除字符串里非数字字符的方法
2015/07/02 Python
python中enumerate函数遍历元素用法分析
2016/03/11 Python
Python下载网络小说实例代码
2018/02/03 Python
Python 访问限制 private public的详细介绍
2018/10/16 Python
python实现图片识别汽车功能
2018/11/30 Python
python处理自动化任务之同时批量修改word里面的内容的方法
2019/08/23 Python
Python StringIO及BytesIO包使用方法解析
2020/06/15 Python
Python pip install之SSL异常处理操作
2020/09/03 Python
Python3+Flask安装使用教程详解
2021/02/16 Python
css3遮罩层镂空效果的多种实现方法
2020/05/11 HTML / CSS
苹果Mac升级:MacSales.com
2017/11/20 全球购物
后勤主管工作职责
2013/12/07 职场文书
国庆节演讲稿范文2014
2014/09/19 职场文书
2014教师党员个人自我评议
2014/09/20 职场文书
助学贷款贫困证明
2014/09/23 职场文书
机关作风建设工作总结
2014/10/23 职场文书
酒店温馨提示语
2015/07/14 职场文书
女方家长婚礼致辞
2015/07/27 职场文书
Ajax实现局部刷新的方法实例
2021/03/31 Javascript