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实现批量将word转html并将html内容发布至网站的方法
Jul 14 Python
python去除字符串中的换行符
Oct 11 Python
Python查看微信撤回消息代码
Jun 07 Python
解决Python3中的中文字符编码的问题
Jul 18 Python
PyCharm代码回滚,恢复历史版本的解决方法
Oct 22 Python
python3 中文乱码与默认编码格式设定方法
Oct 31 Python
基于python3 pyQt5 QtDesignner实现窗口化猜数字游戏功能
Jul 15 Python
Python continue语句实例用法
Feb 06 Python
tensorflow将图片保存为tfrecord和tfrecord的读取方式
Feb 17 Python
python列表删除和多重循环退出原理详解
Mar 26 Python
Python + selenium + crontab实现每日定时自动打卡功能
Mar 31 Python
Python OpenCV 彩色与灰度图像的转换实现
Jun 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
php stripslashes和addslashes的区别
2014/02/03 PHP
thinkphp3.2中Lite文件替换框架入口文件或应用入口文件的方法
2015/05/21 PHP
详解Yaf框架PHPUnit集成测试方法
2017/12/27 PHP
node.js中实现同步操作的3种实现方法
2014/12/05 Javascript
关于jquery中动态增加select,事件无效的快速解决方法
2016/08/29 Javascript
bootstrap datepicker 与bootstrapValidator同时使用时选择日期后无法正常触发校验的解决思路
2016/09/28 Javascript
浅谈Angular.js中使用$watch监听模型变化
2017/01/10 Javascript
jQuery插件ContextMenu自定义图标
2017/03/15 Javascript
javascript 中的继承实例详解
2017/05/05 Javascript
JS实现碰撞检测的方法分析
2018/01/19 Javascript
vue中的自定义分页插件组件的示例
2018/08/18 Javascript
在AngularJs中设置请求头信息(headers)的方法及不同方法的比较
2018/09/04 Javascript
微信小程序实现收货地址左滑删除
2020/11/18 Javascript
一篇文章带你浅入webpack的DLL优化打包
2020/02/20 Javascript
js实现小星星游戏
2020/03/23 Javascript
vue实现循环滚动列表
2020/06/30 Javascript
基于vuex实现购物车功能
2021/01/10 Vue.js
[05:31]DOTA2上海特级锦标赛主赛事第三日RECAP
2016/03/05 DOTA
Python3字符串学习教程
2015/08/20 Python
python使用正则表达式替换匹配成功的组并输出替换的次数
2017/11/22 Python
Selenium chrome配置代理Python版的方法
2018/11/29 Python
解决Pycharm 包已经下载,但是运行代码提示找不到模块的问题
2019/08/31 Python
使用django和vue进行数据交互的方法步骤
2019/11/11 Python
解决python web项目意外关闭,但占用端口的问题
2019/12/17 Python
python代码如何实现余弦相似性计算
2020/02/09 Python
linux系统下pip升级报错的解决方法
2021/01/31 Python
Python用requests库爬取返回为空的解决办法
2021/02/21 Python
世界第一冲浪品牌:O’Neill
2016/08/30 全球购物
马德里运动鞋商店:Nigra Mercato
2020/02/16 全球购物
JoJo Maman Bébé爱尔兰官网:英国最受欢迎的精品母婴品牌
2020/12/20 全球购物
竞聘报告优秀范文
2014/11/06 职场文书
三方合作意向书范本
2015/05/09 职场文书
财务年终工作总结大全
2019/06/20 职场文书
2021年pycharm的最新安装教程及基本使用图文详解
2021/04/03 Python
tensorflow+k-means聚类简单实现猫狗图像分类的方法
2021/04/28 Python
MySQL 数据 data 基本操作
2022/05/04 MySQL