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对象类型及其运算方法(详解)
Jul 05 Python
让Django支持Sql Server作后端数据库的方法
May 29 Python
使用Py2Exe for Python3创建自己的exe程序示例
Oct 31 Python
Python删除n行后的其他行方法
Jan 28 Python
Python代码实现删除一个list里面重复元素的方法
Apr 02 Python
python flask框架实现传数据到js的方法分析
Jun 11 Python
Python re 模块findall() 函数返回值展现方式解析
Aug 09 Python
django配置app中的静态文件步骤
Mar 27 Python
python中什么是面向对象
Jun 11 Python
Python实现SMTP邮件发送
Jun 16 Python
一文带你了解Python 四种常见基础爬虫方法介绍
Dec 04 Python
使用pipenv管理python虚拟环境的全过程
Sep 25 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
迪菲-赫尔曼密钥交换(Diffie?Hellman)算法原理和PHP实现版
2015/05/12 PHP
PHP基于yii框架实现生成ICO图标
2015/11/13 PHP
PHP读取XML文件的方法实例总结【DOMDocument及simplexml方法】
2019/09/10 PHP
Mootools 1.2教程(21)——类(二)
2009/09/15 Javascript
我的javascript 函数链之演变
2011/04/07 Javascript
jQuery之end()和pushStack()使用介绍
2012/02/07 Javascript
jQuery 拖动层(在可视区域范围内)
2012/05/24 Javascript
自己编写的类似JS的trim方法
2013/10/09 Javascript
JS案例分享之金额小写转大写
2014/05/15 Javascript
JavaScript字符串对象slice方法入门实例(用于字符串截取)
2014/10/16 Javascript
js与css实现弹出层覆盖整个页面的方法
2014/12/13 Javascript
JavaScript获取对象在页面中位置坐标的方法
2016/02/03 Javascript
JavaScript资源预加载组件和滑屏组件的使用推荐
2016/03/10 Javascript
实例讲解使用原生JavaScript处理AJAX请求的方法
2016/05/10 Javascript
Javascript OOP之面向对象
2016/07/31 Javascript
javascript self对象使用详解
2016/10/18 Javascript
javascript 动态生成css代码的两种方法
2017/03/17 Javascript
vue2.0 axios前后端数据处理实例代码
2017/06/30 Javascript
微信小程序模拟cookie的实现
2018/06/20 Javascript
详解vue中的computed的this指向问题
2018/12/05 Javascript
详解es6新增数组方法简便了哪些操作
2019/05/09 Javascript
原生js实现ajax请求和JSONP跨域请求操作示例
2020/03/14 Javascript
[48:31]完美世界DOTA2联赛PWL S3 DLG vs Phoenix 第二场 12.17
2020/12/19 DOTA
python多进程共享变量
2016/04/06 Python
Python实现CNN的多通道输入实例
2020/01/17 Python
jenkins+python自动化测试持续集成教程
2020/05/12 Python
PyCharm中关于安装第三方包的三个建议
2020/09/17 Python
pycharm进入时每次都是insert模式的解决方式
2021/02/05 Python
来自全球大都市的高级街头服饰:Pegador
2018/01/03 全球购物
印度排名第一的蛋糕、鲜花和礼品送货:Winni
2019/08/02 全球购物
兰蔻俄罗斯官方网站:Lancome俄罗斯
2019/12/09 全球购物
项目经理的岗位职责
2013/11/23 职场文书
无房产证房屋转让协议书合同样本
2014/10/18 职场文书
工作表扬信
2015/01/17 职场文书
小学音乐课歌曲《堆雪人》教学反思
2016/02/18 职场文书
甜美蛋糕店的创业计划书模板,拿来即用!
2019/08/21 职场文书