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 相关文章推荐
用smtplib和email封装python发送邮件模块类分享
Feb 17 Python
使用Python抓取模板之家的CSS模板
Mar 16 Python
Python框架Flask的基本数据库操作方法分析
Jul 13 Python
强悍的Python读取大文件的解决方案
Feb 16 Python
python自动化之Ansible的安装教程
Jun 13 Python
在python中用print()输出多个格式化参数的方法
Jul 16 Python
什么是Python包的循环导入
Sep 08 Python
详解python实现可视化的MD5、sha256哈希加密小工具
Sep 14 Python
Python实现EM算法实例代码
Oct 04 Python
Python自动化办公Excel模块openpyxl原理及用法解析
Nov 05 Python
Pandas DataFrame求差集的示例代码
Dec 13 Python
python里glob模块知识点总结
Jan 05 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
ThinkPHP 防止表单重复提交的方法
2011/08/08 PHP
php $_SERVER windows系统与linux系统下的区别说明
2014/02/14 PHP
PHP实现的无限分类类库定义与用法示例【基于thinkPHP】
2018/08/06 PHP
javascript 动态设置已知select的option的value值的代码
2009/12/16 Javascript
Javascript 入门基础学习
2010/03/10 Javascript
js 自定义个性下拉选择框示例
2013/08/20 Javascript
jquery 使用简明教程
2014/03/05 Javascript
解决自定义$(id)的方法与jquery选择器$冲突的问题
2014/06/14 Javascript
jquery单行文字向上滚动效果的实现代码
2014/09/05 Javascript
为什么JS中eval处理JSON数据要加括号
2015/04/13 Javascript
jQuery EasyUI 菜单与按钮之创建简单的菜单和链接按钮
2015/11/18 Javascript
基于Javascript实现弹出页面效果
2016/01/01 Javascript
jQuery获取访问者IP地址的方法(基于新浪API与QQ查询接口)
2016/05/25 Javascript
需灵活掌握的Bootstrap预定义排版类 你精通吗?
2016/06/20 Javascript
Spring Boot+AngularJS+BootStrap实现进度条示例代码
2017/03/02 Javascript
Javascript实现信息滚动效果
2017/05/18 Javascript
fullpage.js最后一屏滚动方式
2018/02/06 Javascript
解决nodejs的npm命令无反应的问题
2018/05/17 NodeJs
vue如何使用async、await实现同步请求
2019/12/09 Javascript
JS端基于download.js实现图片、视频时直接下载而不是打开预览
2020/05/09 Javascript
JavaScript编码小技巧分享
2020/09/17 Javascript
win10下Python3.6安装、配置以及pip安装包教程
2017/10/01 Python
Python requests库用法实例详解
2018/08/14 Python
Python玩转PDF的各种骚操作
2019/05/06 Python
Python3之手动创建迭代器的实例代码
2019/05/22 Python
Python SQLAlchemy入门教程(基本用法)
2019/11/11 Python
windows下的pycharm安装及其设置中文菜单
2020/04/23 Python
西班牙家用电器和电子产品购物网站:Mi Electro
2019/02/25 全球购物
Etam德国:内衣精品店
2019/08/25 全球购物
法国在线药房:Shop Pharmacie
2019/11/26 全球购物
俄罗斯在线购买飞机票、火车票、巴士票网站:Tutu.ru
2020/03/16 全球购物
小学网上祭英烈活动总结
2014/07/05 职场文书
工作试用期自我评价
2015/03/10 职场文书
暗恋桃花源观后感
2015/06/12 职场文书
vue实现省市区联动 element-china-area-data插件
2022/04/22 Vue.js
html,css,javascript是怎样变成页面的
2023/05/07 HTML / CSS