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中的字典来处理索引统计的方法
May 05 Python
Python简单计算文件夹大小的方法
Jul 14 Python
python正则表达式之作业计算器
Mar 18 Python
python实现文本进度条 程序进度条 加载进度条 单行刷新功能
Jul 03 Python
Pytorch实现GoogLeNet的方法
Aug 18 Python
python打印n位数“水仙花数”(实例代码)
Dec 25 Python
Python有参函数使用代码实例
Jan 06 Python
Pytorch 中retain_graph的用法详解
Jan 07 Python
Pyecharts绘制全球流向图的示例代码
Jan 08 Python
基于python模拟bfs和dfs代码实例
Nov 19 Python
python中把元组转换为namedtuple方法
Dec 09 Python
Python的这些库,你知道多少?
Jun 09 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中如何调用用户自定义函数
2013/08/06 PHP
PHP自定义错误用法示例
2016/09/28 PHP
PHP实现的最大正向匹配算法示例
2017/12/19 PHP
JavaScript 无符号右移赋值操作
2009/04/17 Javascript
JavaScript 组件之旅(四):测试 JavaScript 组件
2009/10/28 Javascript
JavaScript中的作用域链和闭包
2012/06/30 Javascript
JavaScript实现QueryString获取GET参数的方法
2013/07/02 Javascript
Jquery实现图片放大镜效果的思路及代码(自写)
2013/10/18 Javascript
如何使用HTML5地理位置定位功能
2015/04/27 Javascript
JavaScript实现自动变换表格边框颜色
2015/05/08 Javascript
window.onload与$(document).ready()的区别分析
2015/05/30 Javascript
使用Raygun对Node.js应用进行错误处理的方法
2015/06/23 Javascript
js正则表达式验证密码强度【推荐】
2017/03/03 Javascript
微信小程序五星评分效果实现代码
2017/04/06 Javascript
node.js 用socket实现聊天的示例代码
2017/10/17 Javascript
Vue组件中slot的用法
2018/01/30 Javascript
vue中的mvvm模式讲解
2019/01/31 Javascript
解决微信小程序scroll-view组件无横向滚动的问题
2020/02/04 Javascript
Python创建二维数组实例(关于list的一个小坑)
2017/11/07 Python
python之Flask实现简单登录功能的示例代码
2018/12/24 Python
浅析python的Lambda表达式
2019/02/27 Python
python celery分布式任务队列的使用详解
2019/07/08 Python
40行Python代码实现天气预报和每日鸡汤推送功能
2020/02/27 Python
Python用摘要算法生成token及检验token的示例代码
2020/12/01 Python
jupyter notebook远程访问不了的问题解决方法
2021/01/11 Python
凯特方迪化妆品官网:Kat Von D Beauty
2016/11/15 全球购物
英国最大最好的无人机商店:Drones Direct
2019/07/12 全球购物
计算 s=(x*y)1/2,用两个宏定义来实现
2016/08/11 面试题
自荐信格式
2013/12/01 职场文书
高一学生评语大全
2014/04/25 职场文书
群众路线教育实践活动个人对照检查材料
2014/09/22 职场文书
Apache Calcite 实现方言转换的代码
2021/04/24 Servers
微信小程序用户授权最佳实践指南
2021/05/08 Javascript
一小时学会TensorFlow2之基本操作2实例代码
2021/09/04 Python
Python集合set()使用的方法详解
2022/03/18 Python
Nginx 安装SSL证书完成HTTPS部署
2022/04/28 Servers