Python真题案例之最长回文子串 周期串详解
作者:酷尔。 发布时间:2021-12-01 02:57:02
标签:Python,回文子串,周期串
一、最长回文子串
问题描述🪐
大家已经熟悉了AABCC、AABBCC这种类型的字符串是回文串。
也就是说,排除掉字符串中的各种字符,字母不区分大小写,完成最长回文子串挑选即可。 如果有几个相同长度的字符串,需要使用最左侧的子串,输出的时候原样输出
样例输入:
“Confuciuss say:Madam,I'm Adam”
样例输出:
“Mandam,I'm Adam”
问题分析🪐
第一步应该去除原字符串内的特殊字符得到一个只含有字母的字符串
第二步就是进行纯字母字符串中回文子串的挑选
将指定的回文字符串挑选出来还需要进行原样输出
所以应记录一下子串首尾字符在原字符串中的坐标。
可以定义一个数组长度与纯字母子串一样长。在进行筛选空白字符的时候记录该字符在原串的索引
代码实现🪐
老规矩先上运行结果:
这里使用了两种实现方式,一种是c语言风格一种是Python 两者主要区别就是Python可能会有一些库方便进行判断。
# C语言风格实现
import sys
mystr=sys.stdin.readline().strip()
charr=""
charri=[]
mymax=-1
x=0
y=0
flag=True
j=-1
for i in mystr:
j+=1
if ord(i)<65 or ord(i)>122:
continue
else:
charr+=i
charri.append(j)
charr=charr.lower()
# print(charr,charri)
i=0
while i<len(charr):
j=i
while j<len(charr):
k=i
while k<=j:
if charr[k]!=charr[i+j-k]:
flag=False
break
k+=1
if flag:
if mymax<j-i+1:
mymax=j-i+1
x=i
y=j
flag=True
j+=1
i+=1
print("第一种实现方式:")
print(x,y)
print(mystr[charri[x]:charri[y]+1:])
# python风格实现
import sys
mstr=sys.stdin.readline().strip()
tstr=""
snum=[]
smax=0
x=0
y=0
j=0
for i in mstr:
if ord(i)>=65 and ord(i)<=122:
tstr+=i
snum.append(j)
j+=1
tstr=tstr.lower()
for i in range(len(tstr)):
for j in range(i,len(tstr)+1):
if tstr[i:j]==tstr[i:j][::-1] and len(tstr[i:j])>smax:
smax=len(tstr[i:j])
x=i
y=j
print("第二种实现:")
print(x,y)
print(mstr[snum[x]:snum[y-1]+1])
二、周期串
问题描述🪐
如果一个字符串可以由一个长度为k的子串重复多个周期得到,那么我们说该串是以k为周期的周期串
例如:qweqweqwe(以3为周期),abababab(可以以2,4为周期)
我们的任务就是输入一个字符串然后找出该串的最小周期数
样例输入:
HoHoHo
样例输出:
2
问题分析🪐
先是进行字符串的读取,然后选定一个周期,判断字符串中下一周期子串与上一周期子串是否对应位置相同
有一个位置不相同的就判定为不是周期串,因为找的是最小周期可以从1开始判定 找最大周期数就从主串长度开始判断起
代码实现🪐
老规矩先上运行结果:
import sys
mmax=0
mystr=sys.stdin.readline().strip()
for i in range(1,len(mystr)):
if len(mystr)%i==0:
for j in range(0,len(mystr)//i-1):
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]))
break
else:
mmax=i
if mmax!=0:
break
print(mmax)
ᴴᴬᵛᴱ ᴬ ᴳᴼᴼᴰ ᵀᴵᴹᴱ !
来源:https://blog.csdn.net/apple_51931783/article/details/123239381


猜你喜欢
- 译注:原文是StackOverflow上一个如何用程序读取迷宫图片并求解的问题,几位参与者热烈地讨论并给出了自己的代码,涉及到用Python
- 对于变量的访问和设置,我们可以使用get、set方法,如下:class student: def __init__(self,n
- Django实现内容缓存:1、内存缓存settings.py文件配置CACHES = { 'default':
- 一、死锁简单来说,死锁是一个资源被多次调用,而多次调用方都未能释放该资源就会造成死锁,这里结合例子说明下两种常见的死锁情况。1、迭代死锁该情
- 最近在实习,boss给布置了一个python的小任务,学习过程中发现copy()和deepcopy()这对好 * 实在是有点过分,搞的博主就有
- 本文实例为大家分享了OpenCV基于ORB算法实现角点检测的具体代码,供大家参考,具体内容如下ORB算法是FAST算法和BRIEF算法的结合
- 方法一 :这个是我在站长工具的查询页面使用的防止频繁查询,刷新页面的代码!下面函数的功能是3秒内查询页面即刷新了页面,超过2次就提示!sea
- 前言在小程序中,e.target与e.currentTarget是非常重要的,尤其是涉及到页面传值时currentTarget和target
- let和const声明的变量只在代码块内有效{let a = 10;var b = 1;}a // ReferenceError: a is
- sklearn-SVC实现与类参数对应的API:http://scikit-learn.sourceforge.net/stable/mod
- 前言之前做过pyqt的一个简单界面,在一个窗口(MainWindow)中实现一些操作;之前嫌麻烦没有去做多窗口和它们的切换功能。最近研究了下
- 正三角形九九乘法表#正三角形九九乘法表for i in range(1,10): for j in range(1
- 有时候我们在前端开发工作中为了获取图片的信息,需要在图片加载完成后才可以正确的获取到图片的大小尺寸,并且执行相应的回调函数使图片产生某种显示
- 1. ORACLE 的解析器按照从右到左的顺序处理 FROM 子句中的表名,因此 FROM 子句中写在最后的表(基础表 driving ta
- 写在前面现在人人都有微信,一句“咱们加个微信呗”搭载了你我之间的友谊桥梁,浑然不知自己的微信朋友已经四五百了,甚至上千,几千的都有;然而那个
- 在上一篇博客介绍TOML配置的时候,讲到了通过信号通知重载配置。我们在这一篇中介绍下如何的平滑重启server。与重载配置相同的是我们也需要
- Jupyter Notebook 的快捷键使用前需要进行安装:pip install jupyter (前提是你已经安装好Python,并将
- 这篇文章主要介绍了python isinstance函数用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
- 阅读《YUI学习笔记(1)》YAHOO.lang.dump 与 YAHOO.lang.substitute。1.&nbs
- 介绍本文将介绍基于OpenCV实现视频的循环播放。有以下三个步骤:首先设置一个frame的设置参数frame_counter,值为0在读帧时