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 相关文章推荐
wxPython 入门教程
Oct 07 Python
Django在Win7下的安装及创建项目hello word简明教程
Jul 14 Python
详解Python的Django框架中的模版相关知识
Jul 15 Python
Python使用pyh生成HTML文档的方法示例
Mar 10 Python
Python数据类型之Tuple元组实例详解
May 08 Python
Python搭建Spark分布式集群环境
Jul 05 Python
python flask几分钟实现web服务的例子
Jul 26 Python
简单了解python数组的基本操作
Nov 26 Python
Python绘制三角函数图(sin\cos\tan)并标注特定范围的例子
Dec 04 Python
python 统计文件中的字符串数目示例
Dec 24 Python
浅谈对pytroch中torch.autograd.backward的思考
Dec 27 Python
Python3 中sorted() 函数的用法
Mar 24 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 3行代码的分页算法(求起始页和结束页)
2009/10/21 PHP
php expects parameter 1 to be resource, array given 错误
2011/03/23 PHP
Linux下PHP加速器APC的安装与配置笔记
2014/10/24 PHP
php 实现银联商务H5支付的示例代码
2019/10/12 PHP
php下的原生ajax请求用法实例分析
2020/02/28 PHP
比较全面的event对像在IE与FF中的区别 推荐
2009/09/21 Javascript
JavaScript 弹出窗体点击按钮返回选择数据的实现
2010/04/01 Javascript
$.getJSON在IE下失效的原因分析及解决方法
2013/06/16 Javascript
zeroclipboard 单个复制按钮和多个复制按钮的实现方法
2014/06/14 Javascript
jquery获得同源iframe内body下标签的值的方法
2014/09/25 Javascript
javascript数组详解
2014/10/22 Javascript
jQuery中cookie插件用法实例分析
2015/12/04 Javascript
ES6学习笔记之正则表达式和字符串正则方法分析
2017/04/25 Javascript
vue实现城市列表选择功能
2018/07/16 Javascript
vue的for循环使用方法
2019/02/12 Javascript
Vue中通过Vue.extend动态创建实例的方法
2019/08/13 Javascript
简单了解vue中的v-if和v-show的区别
2019/10/08 Javascript
js实现点赞效果
2020/03/16 Javascript
js实现点击按钮随机生成背景颜色
2020/09/05 Javascript
利用Python获取操作系统信息实例
2016/09/02 Python
django 使用全局搜索功能的实例详解
2019/07/18 Python
Django中提供的6种缓存方式详解
2019/08/05 Python
Pycharm远程调试原理及具体配置详解
2019/08/08 Python
基于Python绘制个人足迹地图
2020/06/01 Python
python 多线程中join()的作用
2020/10/29 Python
python xlsxwriter模块的使用
2020/12/24 Python
史蒂夫·马登加拿大官网:Steve Madden加拿大
2017/11/18 全球购物
为娇小女性量身打造:Petite Studio
2018/11/01 全球购物
Delphi工程师笔试题
2013/09/21 面试题
物流管理专业应届生求职信
2013/11/21 职场文书
项目施工员岗位职责
2014/03/09 职场文书
迎新生欢迎词
2015/01/23 职场文书
2015年试用期工作总结范文
2015/05/28 职场文书
2015迎新晚会开场白
2015/05/29 职场文书
导游词之秦皇岛燕塞湖
2020/01/03 职场文书
Java使用JMeter进行高并发测试
2021/11/23 Java/Android