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中List的sort方法指南
Sep 01 Python
python中文编码问题小结
Sep 28 Python
编写简单的Python程序来判断文本的语种
Apr 07 Python
Python MySQLdb 使用utf-8 编码插入中文数据问题
Mar 13 Python
Django csrf 两种方法设置form的实例
Feb 03 Python
pygame实现非图片按钮效果
Oct 29 Python
Flask中endpoint的理解(小结)
Dec 11 Python
Python3 元组tuple入门基础
Feb 09 Python
python 实现 hive中类似 lateral view explode的功能示例
May 18 Python
面向新手解析python Beautiful Soup基本用法
Jul 11 Python
python中的sys模块和os模块
Mar 20 Python
python神经网络学习 使用Keras进行简单分类
May 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+AJAX实现无刷新注册(带用户名实时检测)
2006/12/02 PHP
php接口和抽象类使用示例详解
2014/03/02 PHP
PHP获取远程图片并保存到本地的方法
2015/05/12 PHP
ThinkPHP中create()方法自动验证表单信息
2017/04/28 PHP
jQuery AnythingSlider滑动效果插件
2010/02/07 Javascript
javascript forEach通用循环遍历方法
2010/10/11 Javascript
jquery实现的一个导航滚动效果具体代码
2013/05/27 Javascript
JavaScript动态操作表格实例(添加,删除行,列及单元格)
2013/11/25 Javascript
JS响应鼠标点击实现两个滑块区间拖动效果
2015/10/26 Javascript
js添加事件的通用方法推荐
2016/05/15 Javascript
JavaScript数据类型学习笔记分享
2016/09/01 Javascript
微信小程序 功能函数小结(手机号验证*、密码验证*、获取验证码*)
2017/12/08 Javascript
仿京东快报向上滚动的实例
2017/12/13 Javascript
深入理解JS中Number(),parseInt(),parseFloat()三者比较
2018/08/24 Javascript
Vue页面刷新记住页面状态的实现
2019/12/27 Javascript
js实现带搜索功能的下拉框
2020/01/11 Javascript
JavaScript如何判断对象有某属性
2020/07/03 Javascript
[43:24]VG vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python 查找字符串是否存在实例详解
2017/01/20 Python
python 调用win32pai 操作cmd的方法
2017/05/28 Python
python操作oracle的完整教程分享
2018/01/30 Python
Python中的函数式编程:不可变的数据结构
2018/10/08 Python
对Python2与Python3中__bool__方法的差异详解
2018/11/01 Python
Django中自定义查询对象的具体使用
2019/10/13 Python
Python astype(np.float)函数使用方法解析
2020/06/08 Python
什么是servlet链?
2014/07/13 面试题
公司承诺书范文
2014/05/19 职场文书
学习党章的体会
2014/11/07 职场文书
辩论赛开场白大全(主持人+辩手)
2015/05/29 职场文书
有关西游记的读书笔记
2015/06/25 职场文书
2015暑假实习报告范文
2015/07/13 职场文书
婚礼领导致辞大全
2015/07/28 职场文书
2019年最新版见习人员管理制度!
2019/07/08 职场文书
Python绘制地图神器folium的新人入门指南
2021/05/23 Python
MySQL连表查询分组去重的实现示例
2021/07/01 MySQL
基于Redis结合SpringBoot的秒杀案例详解
2021/10/05 Redis