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函数中的默认参数
Mar 30 Python
Python的__builtin__模块中的一些要点知识
May 02 Python
Django框架验证码用法实例分析
May 10 Python
django 2.2和mysql使用的常见问题
Jul 18 Python
OpenCV模板匹配matchTemplate的实现
Oct 18 Python
python画图常规设置方式
Mar 05 Python
Django 返回json数据的实现示例
Mar 05 Python
用python实现学生管理系统
Jul 24 Python
python实现快速文件格式批量转换的方法
Oct 16 Python
Python利用matplotlib绘制散点图的新手教程
Nov 05 Python
python+selenium实现12306模拟登录的步骤
Jan 21 Python
详解win10下pytorch-gpu安装以及CUDA详细安装过程
Jan 28 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写日志的实现方法
2014/11/05 PHP
php实现socket推送技术的示例
2017/12/20 PHP
PHP Laravel中的Trait使用方法
2019/01/20 PHP
多浏览器兼容的获取元素和鼠标的位置的js代码
2009/12/15 Javascript
几个比较经典常用的jQuery小技巧
2010/03/01 Javascript
来自国外的页面JavaScript文件优化
2010/12/08 Javascript
js调用activeX获取u盘序列号的代码
2011/11/21 Javascript
引用外部js乱码问题分析及解决方案
2013/04/12 Javascript
js保留小数点后几位的写法
2014/01/03 Javascript
AngularJS中的$watch(),$digest()和$apply()区分
2016/04/04 Javascript
字太多用...代替的方法(两种)
2017/03/15 Javascript
vue路由懒加载的实现方法
2018/03/12 Javascript
如何用input标签和jquery实现多图片的上传和回显功能
2018/05/16 jQuery
node.js 模块和其下载资源的镜像设置的方法
2018/09/06 Javascript
一个小时快速搭建微信小程序的方法步骤
2019/04/15 Javascript
JS求1到任意数之间的所有质数的方法详解
2019/05/20 Javascript
Angular 中使用 FineReport不显示报表直接打印预览
2019/08/21 Javascript
基于postman获取动态数据过程详解
2020/09/08 Javascript
Python操作SQLite简明教程
2014/07/10 Python
python连接oracle数据库实例
2014/10/17 Python
特征脸(Eigenface)理论基础之PCA主成分分析法
2018/03/13 Python
Python字符串内置函数功能与用法总结
2019/04/16 Python
flask框架单元测试原理与用法实例分析
2019/07/23 Python
python 的 openpyxl模块 读取 Excel文件的方法
2019/09/09 Python
Django实现随机图形验证码的示例
2020/10/15 Python
Django启动时找不到mysqlclient问题解决方案
2020/11/11 Python
请用用Java代码写一个堆栈
2012/01/26 面试题
通用C#笔试题附答案
2016/11/26 面试题
护士在校生自荐信
2014/02/01 职场文书
租房协议书范例
2014/10/14 职场文书
处级干部考察材料
2014/12/24 职场文书
办公室禁烟通知
2015/04/23 职场文书
地雷战观后感
2015/06/09 职场文书
mysql多表查询-笔记七
2021/04/05 MySQL
python批量更改目录名/文件名的方法
2021/04/18 Python
Python中npy和mat文件的保存与读取
2022/04/24 Python