Python实现针对给定字符串寻找最长非重复子串的方法
作者:Together_CZ 发布时间:2022-12-05 14:38:53
标签:Python,字符串,非重复子串
本文实例讲述了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程序设计有所帮助。
来源:https://blog.csdn.net/together_cz/article/details/76691723


猜你喜欢
- PHP中的字符串操作功能是比较多的,重要的有以下这些: (1)echo,print,printf,spr
- 本文实例讲述了nodejs简单实现TCP服务器端和客户端的聊天功能。分享给大家供大家参考,具体如下:服务器端var net = requir
- 函数名:FenYe(url,pageCount,recordCount,curPage,cssstyle)  
- 如果你完全不懂,那么期望1-2周看完一遍拉倒....不用看的太仔细,后面再看到不懂的时候回头去看这些东西好了1. 前言和准备工作 这里不会介
- 贴代码,一切尽在注释中<html><head> <meta charset="utf-8"
- 前言为了上班摸鱼方便,今天自己写了个爬取笔趣阁小说的程序。好吧,其实就是找个目的学习python,分享一下。一、首先导入相关的模块impor
- 用户输入1、使用input来等待用户输入。如 username = input('username:') password
- 又发一个js版幻灯片,接口比较少,但功能和外观都还不错的,可自定义切换时间:)method: adRotator.initialize(容器
- 1、数据库--所有数据库的大小 exec sp_helpdb --所有数据库的状态 sel
- Python中的任何序列(可迭代的对象)都可以通过赋值操作进行拆分,包括但不限于元组、列表、字符串、文件、迭代器、生成器等。1.元组拆分元组
- 上一篇讲到了javascript的节流函数和防抖函数,那么我们在实际场合中该如何运用呢?首先,我们来理解一下:节流函数首先是节流,就是节约流
- 实际工作经历中,免不了有时候需要连接数据库进行问题排查分析的场景,之前一直习惯通过 mysql -uxxx -hxxxx -P1234 ..
- index_selectanchor_w = self.FloatTensor(self.scaled_anchors).index_sel
- 一、前言python的两个单元测试包分别是 doctest 和 unittest,这两个包的使用起来各有长处,适用于不同的场景doctest
- 前言夏天是用来告别的季节,因为毕业总在七月。那么七月之前的季节是用来干嘛的呢?当然是用来做毕业设计的啦今天还是写一些从简单到难的毕业设计或者
- 俄罗斯方块,一个很有趣的一个小游戏,此次基于html+css+javaScript实现,包含在一个方块落地后自动生成方块、操控方块的移动以及
- 制作爬虫的步骤制作一个爬虫一般分以下几个步骤:分析需求分析网页源代码,配合开发者工具编写正则表达式或者XPath表达式正式编写 python
- 数据读取与保存Text文件对于 Text文件的读取和保存 ,其语法和实现是最简单的,因此我只是简单叙述一下这部分相关知识点,大家可以结合de
- 一、什么是XSS攻击xss攻击:----->web注入xss跨站脚本攻击(Cross site script,简称xss)是一种“HT
- 本文实例为大家分享了python视频按帧截取图片工具的具体代码,供大家参考,具体内容如下描述:将一个视频流按帧数截取大量的图片用途:AI的数