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中自定义函数的教程
Apr 27 Python
实例讲解Python中SocketServer模块处理网络请求的用法
Jun 28 Python
python3 flask实现文件上传功能
Mar 20 Python
Python3字符串encode与decode的讲解
Apr 02 Python
Python对接 xray 和微信实现自动告警
Sep 17 Python
简单了解Django ORM常用字段类型及参数配置
Jan 07 Python
Python获取二维数组的行列数的2种方法
Feb 11 Python
python编程进阶之类和对象用法实例分析
Feb 21 Python
Python 实现自动完成A4标签排版打印功能
Apr 09 Python
python中线程和进程有何区别
Jun 17 Python
利用Python如何制作贪吃蛇及AI版贪吃蛇详解
Aug 24 Python
python源文件的字符编码知识点详解
Mar 04 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 高手之路(一)
2006/10/09 PHP
php实现监听事件
2013/11/06 PHP
PHP连接SQLServer2005方法及代码
2013/12/26 PHP
推荐几款用 Sublime Text 开发 Laravel 所用到的插件
2014/10/30 PHP
php实现的简单美国商品税计算函数
2015/07/13 PHP
php获取英文姓名首字母的方法
2015/07/13 PHP
laravel excel 上传文件保存到本地服务器功能
2019/11/14 PHP
Jquery操作Select 简单方便 一个js插件搞定
2009/11/12 Javascript
js 创建快捷方式的代码(fso)
2010/11/19 Javascript
两个多选select(multiple左右)添加、删除选项和取值实例
2014/05/12 Javascript
nodejs教程之异步I/O
2014/11/21 NodeJs
Javascript中判断对象是否为空
2015/06/10 Javascript
jQuery动态添加
2016/04/07 Javascript
JS简单获取日期相差天数的方法
2017/04/24 Javascript
深入理解Node中的buffer模块
2017/06/03 Javascript
JS设计模式之观察者模式实现实时改变页面中金额数的方法
2018/02/05 Javascript
vue实现学生录入系统之添加删除功能
2018/07/11 Javascript
JavaScript基础教程之如何实现一个简单的promise
2018/09/11 Javascript
js实现窗口全屏示例详解
2019/09/17 Javascript
[16:19]教你分分钟做大人——风暴之灵
2015/03/11 DOTA
Python编程django实现同一个ip十分钟内只能注册一次
2017/11/03 Python
python实现图书馆研习室自动预约功能
2018/04/27 Python
python3实现域名查询和whois查询功能
2018/06/21 Python
python3利用venv配置虚拟环境及过程中的小问题小结
2018/08/01 Python
Python3实现对列表按元组指定列进行排序的方法分析
2018/12/22 Python
手把手教你将Flask应用封装成Docker服务的实现
2020/08/19 Python
如何避免常见的6种HTML5错误用法
2017/11/06 HTML / CSS
Chain Reaction Cycles芬兰:世界上最大的在线自行车商店
2017/12/06 全球购物
Theo + George官方网站:都柏林时尚品牌
2019/04/08 全球购物
人力资源管理专业毕业生自我评价
2013/09/21 职场文书
个人年终总结开头
2015/03/06 职场文书
少先队入队仪式主持词
2015/07/04 职场文书
2015年环境监察工作总结
2015/07/23 职场文书
小程序实现悬浮按钮的全过程记录
2021/10/16 HTML / CSS
Python实现制作销售数据可视化看板详解
2021/11/27 Python
Python实现聚类K-means算法详解
2022/07/15 Python