首页 > 试题广场 >

小易爱回文

[编程题]小易爱回文
  • 热度指数:4824 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解

小易得到了一个仅包含大小写英文字符的字符串,该字符串可能不是回文串。(“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串,“asds”就不是回文串。)

小易可以在字符串尾部加入任意数量的任意字符,使其字符串变成回文串。

现在请你编写一个程序,程序要能计算出小易可以得到的最短回文串。


输入描述:
一行包括一个字符串


输出描述:
一行包括一个字符串,代表答案。
示例1

输入

noon

输出

noon
示例2

输入

noo

输出

noon
示例3

输入

helloworld

输出

helloworldlrowolleh
# 读取输入字符串并去除首尾空白(如空格、换行符)
s = input().strip()

# 生成原始字符串的反转版本([::-1]是Python中反转字符串的简洁写法)
reversed_s = s[::-1]

# 若原始字符串本身就是回文串(与反转字符串相等),直接输出
if s == reversed_s:
    print(s)
else:
    # 获取字符串长度,用于控制循环范围
    n = len(s)

    # 循环寻找最长的匹配片段:原字符串的后缀与反转字符串的前缀匹配
    # 关键在于用原始字符串和翻转后的字符串同时使用当前位置以后的部分查看是否是回文串
    # 如果是则说明当前位置及以前的部分是缺少的,我们需要将这部分倒序追加到原始字符串末尾
    for i in range(n):
        # 核心判断:
        # s[i+1:] 表示原字符串从第i+1个字符到结尾的部分(后缀)
        # reversed_s[:-i-1] 表示反转字符串从开头到第-(i+1)个字符的部分(前缀)
        # 当两者相等时,说明找到了可以对称的最长片段
        if s[i + 1 :] == reversed_s[: -i - 1]:
            # 构造最短回文串:
            # s[:i+1] 是原字符串中需要对称补充的前缀部分
            # [::-1] 将这部分反转,添加到原字符串尾部即可形成回文
            result = s + s[: i + 1][::-1]
            print(result)
            # 找到匹配后立即退出循环,避免多余计算
            break

发表于 2025-10-09 21:55:48 回复(0)
def isPalindrome(t):      #判断t是否为回文
    flag=1
    j=len(t)-1
    for i in range(int(len(t)/2)):
        if t[i]!=t[j]:
            flag=0
            return flag
        j=j-1
    return flag
s=input().strip()
if isPalindrome(s):
    print(s)
else:
    t=s
    for i in range(int(len(s)/2),len(s)):       #对称轴法
        j=i
        k=i+1
        flag=0
        while j>=0 and k<len(s) and s[j]==s[k]:
            j=j-1
            k=k+1
            if k==len(s):
                flag=1
        if k==len(s) and flag==0: 
            k=k-2
            while k>=0:
                s=s+s[k]
                k=k-1
            break
        while flag==1 and j>=0 :
            s=s+s[j]
            j=j-1
        if flag==1:
            break
    print(s)

发表于 2021-05-19 14:11:48 回复(0)