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实现的排列组合计算操作示例
Oct 13 Python
Python读取英文文件并记录每个单词出现次数后降序输出示例
Jun 28 Python
浅述python2与python3的简单区别
Sep 19 Python
Python实现Dijkstra算法
Oct 17 Python
Python多线程处理实例详解【单进程/多进程】
Jan 30 Python
树莓派使用python-librtmp实现rtmp推流h264的方法
Jul 22 Python
使用python os模块复制文件到指定文件夹的方法
Aug 22 Python
Laravel框架表单验证格式化输出的方法
Sep 25 Python
详解pyinstaller selenium python3 chrome打包问题
Oct 18 Python
Python3 assert断言实现原理解析
Mar 02 Python
python多线程semaphore实现线程数控制的示例
Aug 10 Python
python 制作本地应用搜索工具
Feb 27 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/12/06 PHP
PHP中3种生成XML文件方法的速度效率比较
2012/10/06 PHP
PHP程序员必须清楚的问题汇总
2014/12/18 PHP
JavaScript 学习笔记(六)
2009/12/31 Javascript
从零开始学习jQuery (四) jQuery中操作元素的属性与样式
2011/02/23 Javascript
IE和Firefox的Javascript兼容性总结[推荐收藏]
2011/10/19 Javascript
SeaJS入门教程系列之完整示例(三)
2014/03/03 Javascript
浏览器窗口大小变化时使用resize事件对框架不起作用的解决方法
2014/05/11 Javascript
jQuery 隐藏和显示 input 默认值示例
2014/06/03 Javascript
jquery实现先淡出再折叠收起的动画效果
2015/08/07 Javascript
微信小程序tabBar模板用法实例分析【附demo源码下载】
2017/11/28 Javascript
Puppeteer 爬取动态生成的网页实战
2018/11/14 Javascript
python基于urllib实现按照百度音乐分类下载mp3的方法
2015/05/25 Python
理解Python垃圾回收机制
2016/02/12 Python
python抓取搜狗微信公众号文章
2019/04/01 Python
Puppeteer使用示例详解
2019/06/20 Python
python数据分析工具之 matplotlib详解
2020/04/09 Python
详解Anaconda 的安装教程
2020/09/23 Python
用Python进行websocket接口测试
2020/10/16 Python
CSS3教程(4):网页边框和网页文字阴影
2009/04/02 HTML / CSS
使用CSS3在触屏上为按钮实现激活效果
2013/09/27 HTML / CSS
HTML5 canvas绘制的玫瑰花效果
2014/05/29 HTML / CSS
HTML5未来发展趋势
2016/02/01 HTML / CSS
JoJo Maman Bébé爱尔兰官网:英国最受欢迎的精品母婴品牌
2020/12/20 全球购物
总经理司机岗位职责
2014/02/06 职场文书
策划创业计划书
2014/02/06 职场文书
会计电算化专业自荐信
2014/03/15 职场文书
2014年度思想工作总结
2014/11/27 职场文书
安全检查汇报材料
2014/12/26 职场文书
特岗教师个人总结
2015/02/10 职场文书
工作感想范文
2015/08/07 职场文书
乡镇团代会开幕词
2016/03/04 职场文书
2019年大学毕业生个人自我鉴定范文大全
2019/03/21 职场文书
Mysql数据库值的添加、修改、删除及清空操作实例
2021/06/20 MySQL
TypeScript 使用 Tuple Union 声明函数重载
2022/04/07 Javascript
python数字图像处理:图像的绘制
2022/06/28 Python