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 28 Python
python连接字符串的方法小结
Jul 13 Python
python opencv判断图像是否为空的实例
Jan 26 Python
Python叠加两幅栅格图像的实现方法
Jul 05 Python
Django如何将URL映射到视图
Jul 29 Python
springboot配置文件抽离 git管理统 配置中心详解
Sep 02 Python
Django中的FBV和CBV用法详解
Sep 15 Python
python 进程间数据共享multiProcess.Manger实现解析
Sep 23 Python
Python之Numpy的超实用基础详细教程
Oct 23 Python
Python基于network模块制作电影人物关系图
Jun 19 Python
python pymysql库的常用操作
Oct 16 Python
用python实现监控视频人数统计
May 21 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中记录用户访问过的产品,在cookie记录产品id,id取得产品信息
2011/05/04 PHP
php笔记之:php函数range() round()和list()的使用说明
2013/04/26 PHP
PHP文件上传处理案例分析
2016/10/15 PHP
对于Laravel 5.5核心架构的深入理解
2018/02/22 PHP
PHP后期静态绑定实例浅析
2018/12/21 PHP
Avengerls vs Newbee BO3 第二场2.18
2021/03/10 DOTA
运用jquery实现table单双行不同显示并能单行选中
2009/07/25 Javascript
Jquery实现列表(隔行换色,全选,鼠标滑过当前行)效果实例
2013/06/09 Javascript
jquery为页面增加快捷键示例
2014/01/31 Javascript
Javascript基础知识(二)事件
2014/09/29 Javascript
基于Jquery插件Uploadify实现实时显示进度条上传图片
2020/03/26 Javascript
浅谈javascript中new操作符的原理
2016/06/07 Javascript
jQuery处理XML文件的几种方法
2016/06/14 Javascript
完美实现八种js焦点轮播图(上篇)
2016/07/18 Javascript
Laydate时间组件在火狐浏览器下有多时间输入框时只能给第一个输入框赋值的解决方法
2016/08/18 Javascript
微信小程序实现刷脸登录
2018/05/25 Javascript
vue-router动态设置页面title的实例讲解
2018/08/30 Javascript
React router动态加载组件之适配器模式的应用详解
2018/09/12 Javascript
JavaScript ES6箭头函数使用指南
2018/12/30 Javascript
安装多版本Vue-CLI的实现方法
2020/03/24 Javascript
微信小程序实现导航栏和内容上下联动功能代码
2020/06/29 Javascript
PHP魔术方法__ISSET、__UNSET使用实例
2014/11/25 Python
Django 使用logging打印日志的实例
2018/04/28 Python
python银行系统实现源码
2019/10/25 Python
Python编写单元测试代码实例
2020/09/10 Python
HTML5之SVG 2D入门1—SVG(可缩放矢量图形)概述
2013/01/30 HTML / CSS
美国精品家居用品网站:US-Mattress
2016/08/24 全球购物
俄罗斯披萨、寿司和面食送货到家服务:2 Берега
2019/12/15 全球购物
解释一下ruby中的特殊方法与特殊类
2013/02/26 面试题
文秘档案管理岗位职责
2014/03/06 职场文书
企业法人授权委托书
2014/04/03 职场文书
殡葬服务心得体会
2014/09/11 职场文书
售后客服个人自我评价
2014/09/14 职场文书
2015年组织委员工作总结
2015/04/23 职场文书
参观监狱警示教育心得体会
2016/01/15 职场文书
《一面五星红旗》教学反思
2016/02/23 职场文书