首页 > 试题广场 >

回文字符串

[编程题]回文字符串
  • 热度指数:4125 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
回文字符串就是正读和反读都一样的字符串,如“viv”、“nexen”、“12321”、“qqq”、“翻身把身翻” 等。
给定一个非空字符串 str,在最多可以删除一个字符的情况下请编程判定其能否成为回文字符串;如果可以则输出首次删除一个字符所能得到的回文字符串,如果不行则输出字符串 "false" 。

输入描述:
一个非空字符串



输出描述:
一个回文字符串,或者 "false" 字符串(如果无法构造出回文字符串的话)
示例1

输入

abda

输出

ada

说明

删除字符串"abda"中的一个字符 ‘b’ 后,得到 "ada"是一个回文字符串;删除一个字符 ‘d’ 后,得到 "aba"也是一个回文字符串;所以最终输出为 "ada"。

备注:
1、输入仅包含数字或字母;
2、当分别删除不同的字符后,均可得到回文字符串时,输出首次删除一个字符所得到的回文字符串;若无法构造出回文字符串,则输出字符串false;
while 1:
    try:
        s = input()
        flag = 0
        if s[1:] == s[1:][::-1]:
            flag =1
            print(s[1:][::-1])
        elif s[:-1] == s[:-1][::-1]:
            flag =1
            print(s[:-1][::-1])
        else:
            for i in range(1,len(s)-1):
                new = s[0:i]+s[i+1:]
                if new == new[::-1]:
                    print(new)
                    flag = 1
                    break
        if flag == 0:
            print("false")
    except:
        break
发表于 2021-09-10 22:04:58 回复(0)
s = input()  # 获得输入


def judge(s):
    for i in range(0, int(len(s) / 2)):  # 左右元素比较
        if s[i] == s[len(s) - 1 - i]:
            continue
        else:
            return 'false'
    return 'true'


def test(s):
    if len(s) == 0:  # 长度为0
        return 'false'
    for i in range(0, len(s)):
        str1 = s[:i] + s[i + 1:]  # 删除一位后得到str1
        if judge(str1) == 'true':  # str1 判断是否回文
            return str1
        else:
            continue
    return 'false'


print(test(s))
发表于 2021-06-17 19:43:42 回复(0)