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 while 循环使用的简单实例
Jun 08 Python
Django rest framework基本介绍与代码示例
Jan 26 Python
python绘制多个曲线的折线图
Mar 23 Python
python微信好友数据分析详解
Nov 19 Python
python实现猜数字游戏
Mar 25 Python
matplotlib绘制多个子图(subplot)的方法
Dec 03 Python
Python使用urllib模块对URL网址中的中文编码与解码实例详解
Feb 18 Python
python 爬虫 实现增量去重和定时爬取实例
Feb 28 Python
如何基于线程池提升request模块效率
Apr 18 Python
基于jupyter代码无法在pycharm中运行的解决方法
Apr 21 Python
Django配置跨域并开发测试接口
Nov 04 Python
Python字符串格式化方式
Apr 07 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 heredoc和phpwind的模板技术使用方法小结
2008/03/28 PHP
Extjs学习笔记之一 初识Extjs之MessageBox
2010/01/07 Javascript
关于document.cookie的使用javascript
2010/10/29 Javascript
js获得指定控件输入光标的坐标兼容IE,Chrome,火狐等多种主流浏览器
2013/05/21 Javascript
详解JavaScript语法对{}处理的坑爹之处
2014/06/05 Javascript
JavaScript中innerHTML,innerText,outerHTML的用法及区别
2015/09/01 Javascript
JavaScript中的return语句简单介绍
2015/12/07 Javascript
在AngularJS框架中处理数据建模的方式解析
2016/03/05 Javascript
快速解决js动态改变dom元素属性后页面及时渲染的问题
2016/07/06 Javascript
vue.js入门(3)——详解组件通信
2016/12/02 Javascript
jQuery EasyUI 获取tabs的实例解析
2016/12/06 Javascript
bootstrap table 表格中增加下拉菜单末行出现滚动条的快速解决方法
2017/01/05 Javascript
vue拦截器Vue.http.interceptors.push使用详解
2017/04/22 Javascript
深入理解Node中的buffer模块
2017/06/03 Javascript
JavaScript之map reduce_动力节点Java学院整理
2017/06/29 Javascript
Vue自定义指令实现checkbox全选功能的方法
2018/02/28 Javascript
ES6中定义类和对象的方法示例
2019/07/31 Javascript
vue实现验证用户名是否可用
2021/01/20 Vue.js
[04:26]DOTA2上海特锦赛小组赛第二日 TOP10精彩集锦
2016/02/27 DOTA
[56:45]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第一局
2016/02/28 DOTA
Python基本语法经典教程
2016/03/11 Python
python连接、操作mongodb数据库的方法实例详解
2019/09/11 Python
python几种常用功能实现代码实例
2019/12/25 Python
解决Python pip 自动更新升级失败的问题
2020/02/21 Python
Python dict和defaultdict使用实例解析
2020/03/12 Python
python thrift 实现 单端口多服务的过程
2020/06/08 Python
python datetime时间格式的相互转换问题
2020/06/11 Python
《天安门广场》教学反思
2014/04/23 职场文书
难忘的一课教学反思
2014/04/30 职场文书
师德师风自我评价范文
2014/09/11 职场文书
幼儿园感恩节活动方案
2014/10/06 职场文书
党的群众路线学习笔记
2014/11/06 职场文书
2015婚礼主持词开场白
2015/05/28 职场文书
同学聚会致辞集锦
2015/07/28 职场文书
详解pytorch创建tensor函数
2022/03/22 Python
MySQL如何修改字段类型和字段长度
2022/06/10 MySQL