最长重复子串python,python求最长回文子串
今天我们来记录一下字符串处理中常见的回文子串和周期串问题。使用的语言是Python,对字符串的优雅处理是程序员不可或缺的技能。快来一起学习吧。
00-1010一、最长回文子串问题描述问题分析代码实现二。周期性字符串问题描述问题分析代码实现
目录
一、最长回文子串
你已经熟悉AABCC和AABBCC的字符串了,这是回文。
也就是说排除字符串中的各种字符,字母不区分大小写,可以选择最长的回文子串。如果有几个长度相同的字符串,就需要使用最左边的子串,按原样输出。
样本输入:
孔子说“亚当,我是亚当”
样本输出:
“曼丹,我是亚当”
问题描述
第一步应该是删除原始字符串中的特殊字符,得到一个只包含字母的字符串。
第二步,在纯字母串中选择回文子串。
选择指定的回文字符串也需要按原样输出。
所以要记录原字符串中子串的第一个和最后一个字符的坐标。
你可以定义一个数组只要一串纯字母。屏蔽空白字符时,记录字符在原始字符串中的索引。
问题分析
像往常一样,首先运行结果:
这里用了两个实现,一个是C语言风格,一个是Python。两者的主要区别是Python可能有一些库,方便判断。
# C语言风格实现
导入系统
mystr=sys.stdin.readline()。条状()
charr=
charri=[]
mymax=-1
x=0
y=0
标志=真
j=-1
因为我在mystr:
j=1
如果订单(i)65或订单(i)122:
继续
else:
charr=i
charri.append(j)
charr=charr.lower()
#打印(charr,charri)
i=0
而ilen(charr):
j=i
而jlen(charr):
k=i
而k=j:
如果charr[k]!=charr[i j-k]:
标志=假
破裂
k=1
if标志:
如果mymaxj-i 1:
mymax=j-i 1
x=i
y=j
标志=真
j=1
i=1
打印(第一次实现:)
打印(x,y)
打印(mystr[charri[x]: charri[y]1:])
# python风格实现
导入系统
mstr=sys.stdin.readline()。条状()
tstr=
snum=[]
smax=0
x=0
y=0
j=0
对于mstr:中的I
如果订单(i)=65且订单(i)=122:
tstr=i
snum.append(j)
j=1
tstr=tstr.lower()
对于范围内的I(len(tstr)):
对于范围(I,len(tstr) 1):内的j
如果tstr[I :j]==tstr[I :j][:-1]和len(tstr[i:j])smax:
smax=len(tstr[i:j])
x=i
y=j
打印(第二个实现:)
打印(x,y)
print(mstr[snum[x]: snum[y-1]1])
代码实现
二、周期串
如果一个串可以由一个长度为K的子串重复多个周期得到,那么我们说这个串是一个周期为K的周期串。
例如:qweqweqwe(周期为3),abababab(周期为2,4)
我们的任务是输入一个字符串,并找出该字符串的最小循环数。
样本输入:
未完待续
样本输出:
2
问题描述
首先读取字符串,然后选择一个循环,判断字符串中下一个循环的子串是否与上一个循环的子串在同一位置对应。
如果有不同的位置,则判断为不是周期弦,因为最小周期可以从1判断,最大周期可以从主弦的长度判断。
问题分析
像往常一样,首先运行结果:
导入系统
mmax=0
mystr=sys.stdin.readline()。条状()
对于范围(1,len(mystr)):中的I
if len(mystr)%i==0:
对于范围(0,len(mystr)//i-1):中的j
if mystr[j*i:j*i i]!=mystr[(j 1)* I :(j 1)* I I]:
# print(mystr[j*i:j*i i],-,len(mystr[(j 1)* I :(j 1)* I I I]))
破裂
else:
mmax=i
如果mmax!=0:
破裂
打印(mmax)
!
关于Python真题案例最长回文串的循环串的详细讲解本文到此为止。关于Python最长回文串的更多信息,请搜索热门IT软件开发工作室之前的文章或者继续浏览下面的相关文章。希望大家以后多多支持热门的IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。