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完成FizzBuzzWhizz问题(拉勾网面试题)示例
May 05 Python
CentOS 7下Python 2.7升级至Python3.6.1的实战教程
Jul 06 Python
Python3.6日志Logging模块简单用法示例
Jun 14 Python
django从请求到响应的过程深入讲解
Aug 01 Python
利用python打开摄像头及颜色检测方法
Aug 03 Python
Python安装与基本数据类型教程详解
May 29 Python
python实现微信自动回复机器人功能
Jul 11 Python
如何基于Python获取图片的物理尺寸
Nov 25 Python
python实现局域网内实时通信代码
Dec 22 Python
在jupyter notebook 添加 conda 环境的操作详解
Apr 10 Python
python 19个值得学习的编程技巧
Aug 15 Python
Python打包为exe详细教程
May 18 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
BBS(php & mysql)完整版(四)
2006/10/09 PHP
浅析application/x-www-form-urlencoded和multipart/form-data的区别
2014/06/22 PHP
PHP版QQ互联OAuth示例代码分享
2015/07/05 PHP
Yii框架实现多数据库配置和操作的方法
2017/05/25 PHP
关于ThinkPHP中的异常处理详解
2018/05/11 PHP
javascript getElementsByClassName实现代码
2010/10/11 Javascript
ie下动态加态js文件的方法
2011/09/13 Javascript
JavaScript中的迭代器和生成器详解
2014/10/29 Javascript
JavaScript中的索引数组、关联数组和静态数组、动态数组讲解
2014/11/08 Javascript
JS操作XML实例总结(加载与解析XML文件、字符串)
2015/12/08 Javascript
一种新的javascript对象创建方式Object.create()
2015/12/28 Javascript
基于javascript实现彩票随机数生成(升级版)
2020/04/17 Javascript
AngularJS 自定义过滤器详解及实例代码
2016/09/14 Javascript
js控制li的隐藏和显示实例代码
2016/10/15 Javascript
JavaScript之cookie技术详解
2016/11/18 Javascript
ionic进入多级目录后隐藏底部导航栏(tabs)的完美解决方案
2016/11/23 Javascript
Angular.js实现注册系统的实例详解
2016/12/18 Javascript
bootstrap laydate日期组件使用详解
2017/01/04 Javascript
JS左右无缝轮播功能完整实例
2019/05/16 Javascript
node命令行工具之实现项目工程自动初始化的标准流程
2019/08/12 Javascript
layui使用及简单的三级联动实现教程
2020/12/01 Javascript
JS常用跨域方法实现原理解析
2020/12/09 Javascript
[02:56]DOTA2上海特锦赛小组赛解说FreeAgain采访花絮
2016/02/27 DOTA
Python自动化测试工具Splinter简介和使用实例
2014/05/13 Python
python文件和目录操作函数小结
2014/07/11 Python
Python输出各行命令详解
2018/02/01 Python
Python Flask框架模板操作实例分析
2019/05/03 Python
python安装pil库方法及代码
2019/06/25 Python
详解PyTorch中Tensor的高阶操作
2019/08/18 Python
解决pytorch-yolov3 train 报错的问题
2020/02/18 Python
Python数据可视化实现漏斗图过程图解
2020/07/20 Python
CSS实现定位元素居中的方法
2015/06/23 HTML / CSS
extern是什么意思
2016/03/10 面试题
文明礼仪事迹材料
2014/01/09 职场文书
2019同学聚会主持词
2019/05/06 职场文书
唤醒紫霞仙子,携手再游三界!大话手游X《大话西游》电影合作专属剧情任务
2022/04/03 其他游戏