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实现批量把SVG格式转成png、pdf格式的代码分享
Aug 21 Python
跟老齐学Python之深入变量和引用对象
Sep 24 Python
分享Pycharm中一些不为人知的技巧
Apr 03 Python
Python 带有参数的装饰器实例代码详解
Dec 06 Python
对numpy下的轴交换transpose和swapaxes的示例解读
Jun 26 Python
Python3环境安装Scrapy爬虫框架过程及常见错误
Jul 12 Python
django 中QuerySet特性功能详解
Jul 25 Python
tensorflow对图像进行拼接的例子
Feb 05 Python
Python中的wordcloud库安装问题及解决方法
May 27 Python
解决python3安装pandas出错的问题
May 20 Python
python 利用PyAutoGUI快速构建自动化操作脚本
May 31 Python
一些让Python代码简洁的实用技巧总结
Aug 23 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编写一个简单的路由类
2011/04/13 PHP
php 字符串替换的方法
2012/01/10 PHP
ThinkPHP开发--使用七牛云储存
2017/09/14 PHP
ThinkPHP防止重复提交表单的方法实例分析
2018/05/10 PHP
一步一步教你写一个jQuery的插件教程(Plugin)
2009/09/03 Javascript
jquery实现checkbox全选全不选的简单实例
2013/12/31 Javascript
javascript实现动态侧边栏代码
2014/02/19 Javascript
js/jquery判断浏览器的方法小结
2014/09/02 Javascript
js+cookies实现悬浮购物车的方法
2015/05/25 Javascript
个人总结的一些JavaScript技巧、实用函数、简洁方法、编程细节
2015/06/10 Javascript
Jquery+Ajax+PHP+MySQL实现分类列表管理(上)
2015/10/28 Javascript
Vue方法与事件处理器详解
2016/12/01 Javascript
vuejs如何配置less
2017/04/25 Javascript
微信小程序“摇一摇”的实例代码
2017/07/20 Javascript
Vue 按键修饰符处理事件的方法
2018/05/04 Javascript
解决Vue中mounted钩子函数获取节点高度出错问题
2018/05/18 Javascript
讲解vue-router之什么是编程式路由
2018/05/28 Javascript
微信小程序 checkbox使用实例解析
2019/09/09 Javascript
js实现淘宝浏览商品放大镜功能
2020/10/28 Javascript
JS实现炫酷轮播图
2020/11/15 Javascript
[44:40]2018DOTA2亚洲邀请赛3月30日 小组赛A组Liquid VS OG
2018/03/31 DOTA
Python设计模式之工厂模式简单示例
2018/01/09 Python
Python 实现遥感影像波段组合的示例代码
2019/08/04 Python
关于TensorFlow新旧版本函数接口变化详解
2020/02/10 Python
python在协程中增加任务实例操作
2021/02/28 Python
Probikekit日本:自行车套件,跑步和铁人三项装备
2017/04/03 全球购物
英国殿堂级有机护肤品牌:Rodial
2017/04/17 全球购物
木马的传播途径主要有哪些
2016/04/08 面试题
办公室驾驶员岗位职责
2013/11/15 职场文书
教师年度考核评语
2014/04/28 职场文书
我们的节日春节活动方案
2014/08/22 职场文书
技术经济专业求职信
2014/09/03 职场文书
2014年大学团支部工作总结
2014/12/02 职场文书
青年岗位能手事迹材料
2014/12/23 职场文书
vue配置型表格基于el-table拓展之table-plus组件
2022/04/12 Vue.js
python数字图像处理之图像自动阈值分割示例
2022/06/28 Python