大家新年快乐,今天刷到一个经典的笔试编程题,我用Python来解答,并提供思路,先看一下烟花
22.小易爱回文
小易得到了一个仅包含大小写英文字符的字符串,该字符串可能不是回文串。(“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串,“asds”就不是回文串。)
小易可以在字符串尾部加入任意数量的任意字符,使其字符串变成回文串。
现在请你编写一个程序,程序要能计算出小易可以得到的最短回文串。
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 256M,其他语言512M
输入描述:
一行包括一个字符串。
输出描述:
一行包括一个字符串,代表答案。
示例1
输入例子:
noon
输出例子:
noon
示例2
输入例子:
noo
输出例子:
noon
示例3
输入例子:
helloworld
输出例子:
helloworldlrowolleh
首先看到题,都能想到用字符串翻转拼接,线性复杂度就能解答
注意:应该从总长度最小开始,遇到符合条件直接break,这么说有点抽象,直接看代码
s=input()
r=s[::-1] #字符串反转
for i in range(len(s)):
if s[i::]==r[:len(s)-i]: #当出现重合字段,直接输入结果
print(s+r[len(s)-i:])
break
#比如示例2
#第一次比较i=0, s[i::]='noo', r[:len(s)-i]='oon', 不相等,i++
#i=1, s[i::]='oo', r[:len(s)-i]='oo', 相等打印
#原字符串s='noo' + 不重合部分r[len(s)-i:]='n'
因为是从重叠部分大到小进行比较,所以第一次出现就是重叠部分最大(结果长度最小)的情况
现在这到题就解答好了,博主表述的是否清楚?如有不懂欢迎留言
新年新气象,希望今年的我们都能获得自己的成长,2024 happy new year~