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 03 Python
简介Python的collections模块中defaultdict类型的用法
Jul 07 Python
Python中的默认参数实例分析
Jan 29 Python
详解Python3.6安装psutil模块和功能简介
May 30 Python
用xpath获取指定标签下的所有text的实例
Jan 02 Python
Python中super函数用法实例分析
Mar 18 Python
pandas DataFrame的修改方法(值、列、索引)
Aug 02 Python
python中@property和property函数常见使用方法示例
Oct 21 Python
Python3如何对urllib和urllib2进行重构
Nov 25 Python
关于python pycharm中输出的内容不全的解决办法
Jan 10 Python
Python并发爬虫常用实现方法解析
Nov 19 Python
基于python实现监听Rabbitmq系统日志代码示例
Nov 28 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
萌王史莱姆”萌王性别尴尬!那“萌战”归女组还是男?
2018/12/17 日漫
php遍历目录输出目录及其下的所有文件示例
2014/01/27 PHP
ThinkPHP单字母函数(快捷方法)使用总结
2014/07/23 PHP
Win7 64位系统下PHP连接Oracle数据库
2014/08/20 PHP
Thinkphp批量更新数据的方法汇总
2016/06/29 PHP
laravel中的一些简单实用功能
2018/11/03 PHP
PHP高并发和大流量解决方案整理
2019/12/24 PHP
Json对象与Json字符串互转(4种转换方式)
2013/03/27 Javascript
js setTimeout 常见问题小结
2013/08/13 Javascript
js的alert弹出框出现乱码解决方案
2013/09/02 Javascript
基于jquery实现的省市区级联无ajax
2013/09/24 Javascript
extjs 如何给column 加上提示
2014/07/29 Javascript
javascript中replace( )方法的使用
2015/04/24 Javascript
Javascript函数的参数
2015/07/16 Javascript
JS实现选择TextArea内文本的方法
2015/08/03 Javascript
js如何判断输入字符串长度
2015/12/16 Javascript
vue插件tab选项卡使用小结
2016/10/27 Javascript
Angular中使用$watch监听object属性值的变化(详解)
2017/04/24 Javascript
关于微信小程序登录的那些事
2019/01/08 Javascript
JavaScript生成随机验证码代码实例
2019/09/28 Javascript
Vue实现简单计算器案例
2020/02/25 Javascript
Vue中nprogress页面加载进度条的方法实现
2020/11/13 Javascript
Python利用递归和walk()遍历目录文件的方法示例
2017/07/14 Python
python实现拓扑排序的基本教程
2018/03/11 Python
使用python Fabric动态修改远程机器hosts的方法
2018/10/26 Python
基于python实现自动化办公学习笔记(CSV、word、Excel、PPT)
2019/08/06 Python
Marmot土拨鼠官网:美国专业户外运动品牌
2018/01/11 全球购物
英国家居装饰品、户外家具和玻璃器皿购物网站:Rinkit.com
2019/11/04 全球购物
魅力教师事迹材料
2014/01/10 职场文书
社区庆八一活动方案
2014/02/02 职场文书
党员四风问题个人对照检查材料
2014/10/26 职场文书
2015年校长新年寄语
2014/12/08 职场文书
丧事答谢词大全
2015/09/30 职场文书
《和时间赛跑》读后感3篇
2019/12/16 职场文书
ThinkPHP5和ThinkPHP6的区别
2021/03/31 PHP
Python Django 后台管理之后台模型属性详解
2021/04/25 Python