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 相关文章推荐
Python3基础之list列表实例解析
Aug 13 Python
python画出三角形外接圆和内切圆的方法
Jan 25 Python
Python3非对称加密算法RSA实例详解
Dec 06 Python
python3爬虫怎样构建请求header
Dec 23 Python
通过python的matplotlib包将Tensorflow数据进行可视化的方法
Jan 09 Python
对python列表里的字典元素去重方法详解
Jan 21 Python
Python中面向对象你应该知道的一下知识
Jul 10 Python
Python实现直方图均衡基本原理解析
Aug 08 Python
python 实现矩阵按对角线打印
Nov 29 Python
jupyter notebook清除输出方式
Apr 10 Python
python nohup 实现远程运行不宕机操作
Apr 16 Python
pycharm部署django项目到云服务器的详细流程
Jun 29 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程序的php代码
2008/04/07 PHP
深入解析Session是否必须依赖Cookie
2013/08/02 PHP
PHP中spl_autoload_register()和__autoload()区别分析
2014/05/10 PHP
PHP采集静态页面并把页面css,img,js保存的方法
2014/12/23 PHP
PHP常用字符串输出方法分析(echo,print,printf及sprintf)
2021/03/09 PHP
createElement动态创建HTML对象脚本代码
2008/11/24 Javascript
jQuery中使用了document和window哪些属性和方法小结
2011/09/13 Javascript
Js数组的操作push,pop,shift,unshift等方法详细介绍
2012/12/28 Javascript
JavaScript实现页面实时显示当前时间的简单实例
2013/07/20 Javascript
多个jquery.datatable共存,checkbox全选异常的快速解决方法
2013/12/10 Javascript
利用javascript打开模态对话框(示例代码)
2014/01/11 Javascript
学习JavaScript设计模式之责任链模式
2016/01/18 Javascript
javascript中Date对象应用之简易日历实现
2016/07/12 Javascript
AngularJs自定义服务之实现签名和加密
2016/08/02 Javascript
原生JS实现匀速图片轮播动画
2016/10/18 Javascript
Javascript实现倒计时(防页面刷新)实例
2016/12/13 Javascript
jquery——九宫格大转盘抽奖实例
2017/01/16 Javascript
详解Angular-Cli中引用第三方库
2017/05/21 Javascript
微信小程序实现城市列表选择
2018/06/05 Javascript
vue中子组件调用兄弟组件方法
2018/07/06 Javascript
9102年webpack4搭建vue项目的方法步骤
2019/02/20 Javascript
详解JavaScript 的执行机制
2020/09/18 Javascript
Python检测生僻字的实现方法
2016/10/23 Python
python3使用PyMysql连接mysql数据库实例
2017/02/07 Python
Python实现查找数组中任意第k大的数字算法示例
2019/01/23 Python
python文件和文件夹复制函数
2020/02/07 Python
详解Python+Selenium+ChromeDriver的配置和问题解决
2021/01/19 Python
PyQt5通过信号实现MVC的示例
2021/02/06 Python
卡西欧G-SHOCK英国官网: 防水防震手表
2018/01/08 全球购物
英语硕士生求职简历的自我评价
2013/10/15 职场文书
会计学个人自荐信模板
2013/12/13 职场文书
建筑工地标语
2014/06/18 职场文书
整改报告怎么写
2014/11/06 职场文书
2015出纳试用期工作总结
2014/12/12 职场文书
2015年物流客服工作总结
2015/07/27 职场文书
为什么MySQL分页用limit会越来越慢
2021/07/25 MySQL