首页 > 试题广场 >

回文数索引

[编程题]回文数索引
  • 热度指数:6486 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个仅由小写字母组成的字符串。现在请找出一个位置,删掉那个字母之后,字符串变成回文。请放心总会有一个合法的解。如果给定的字符串已经是一个回文串,那么输出-1。

输入描述:
第一行包含T,测试数据的组数。后面跟有T行,每行包含一个字符串。


输出描述:
如果可以删去一个字母使它变成回文串,则输出任意一个满足条件的删去字母的位置(下标从0开始)。例如:

bcc

我们可以删掉位置0的b字符。
示例1

输入

3
aaab
baa
aaa

输出

3
0
-1
def repair(s):
    s = [i for i in s]
    if s == s[::-1]:
        return -1
    n = len(s)
    mask = [True for _ in range(n)]
    for i in range(n):
        mask[i] = False
        tmp = [s[j] for j in range(n) if mask[j]]
        if tmp == tmp[::-1]:
            return i
        mask[i] = True

a = int(input())
b = []
for i in range(a):
    b.append(input())
for j in b:
    print(repair(j))

发表于 2022-08-05 13:29:00 回复(0)
n=int(input())
for i in range(0,n):
    arr=list(map(str,input()))
    l=len(arr)
    pos=0
    while len(arr)>1:
        if arr[0]==arr[-1]:
            arr.pop(0)
            arr.pop()
            pos+=1
            if len(arr)==1:
                print(-1)
                break
        else:
            if len(arr)==2:
                print(pos+1)
                break
            if arr[0]==arr[-2]:
                pos=l-pos-1
                print(pos)
                break
            if arr[1]==arr[-1]:
                print(pos)
                break


编辑于 2021-03-26 21:16:40 回复(0)
n=int(input())
for i in range(n):
    s=input()
    m=-1
    for j in range(len(s)//2):
        if s[j]==s[len(s)-j-1]:
            continue
        elif s[j+1]==s[len(s)-j-1]:
            m=j
            break
        elif s[j]==s[len(s)-j-2]:
            m=len(s)-j-1
            break
    print(m)

发表于 2020-06-09 15:14:16 回复(0)