Python 为什么我只得到一个错误的测试用例,而所有其他的都是正确的?

Python 为什么我只得到一个错误的测试用例,而所有其他的都是正确的?,python,Python,问题: 回文是一个前后读相同的字符串。对于 例如,字符串“z”、“aaa”、“aba”和“abccba”是回文, 但“代码部队”和“ab”并非如此。你讨厌回文是因为它们 给你似曾相识的感觉 有一个字符串s。您必须只插入一个字符“a” 在美国某地。如果可以创建一个不是 回文,你应该找到一个例子。否则,你应该报告 这是不可能的 例如,假设s=“cbabc”。通过插入“a”,您可以创建 “acbabc”、“cababc”、“cbaabc”、“cbabac”或“cbabca”。然而,“cbaabc” 是

问题

回文是一个前后读相同的字符串。对于 例如,字符串“z”、“aaa”、“aba”和“abccba”是回文, 但“代码部队”和“ab”并非如此。你讨厌回文是因为它们 给你似曾相识的感觉

有一个字符串s。您必须只插入一个字符“a” 在美国某地。如果可以创建一个不是 回文,你应该找到一个例子。否则,你应该报告 这是不可能的

例如,假设s=“cbabc”。通过插入“a”,您可以创建 “acbabc”、“cababc”、“cbaabc”、“cbabac”或“cbabca”。然而,“cbaabc” 是回文,因此必须输出其他选项之一

输入第一行包含一个整数t(1≤T≤104)-测试用例的数量

每个测试用例的唯一一行包含一个字符串s,该字符串由 小写英文字母

所有字符串的总长度不超过3⋅105

输出对于每个测试用例,如果没有解决方案,则输出“否”

否则,输出“YES”,后跟构造的长度字符串 |下一行是s |+1。如果有多个解决方案,您可以打印 任何

您可以在任何情况下打印“是”和“否”的每个字母(大写或小写) 较低)

示例 输入 6. cbabc ab 扎 文学士 A. 章鱼

输出 对 cbabac 对 aab 对 扎扎 对 咩 不 对 章鱼

我的解决方案:

n=int(input())
for i in range (0,n):
    x=input().split()
    l=len(x)
    for j in range (0,l):
        
        x.insert(j,"a")
        if x == x[::-1]:
            print("NO")
            del x[j]
            
        else:
            z=''.join(map(str,x))
            print("YES")
            print(z)
            del x[j]
            continue
我运行了上面给出的示例。所有测试用例都是正确的,除了“zza”,在这种情况下,我得到的是“azza”,而我应该得到“zaza”。代码告诉我它不是回文,我不知道为什么


请帮忙。

我觉得你把这个问题复杂化了。为什么不试试呢

def func(word):
    outcomes = []
    word = [char for char in word]
    for i in range(len(word) + 1):
        word.insert(i, "a")
        if word != word[::-1]:
            outcomes.append("".join(word))
        word.pop(i)

    return list(set(outcomes))


print(func('abba'))

看起来简单多了。
列表(set(outcouts))
只是一个删除所有重复项的肮脏把戏

这会产生您使用大致相同的原理寻求的结果。其中一个关键点是,在你尝试每个位置之前,你不能打印“否”,当你得到“是”时,你需要停止检查


str.split
不是将字符串转换为其字符列表的正确函数。问题是,如果确实找到回文,则不会在再次循环之前删除该字母。如果,则需要删除
两半中的字母。或者,您可以每次复制一份列表并进行操作。@TimRoberts,但我正在使用del x[j]@TigerhawkT3删除,那么我应该使用什么呢?split添加了“”,但我认为这是可行的。
'hello'.split()
产生
['hello']
<代码>列表('hello')
生成
['h','e','l','l','o']
。当你不能完全确定你在用什么的时候,加一行打印出来,这样你就可以看到了。我还没有研究过集合。你能帮我找出我的代码中到底有什么错误吗?因为每次我运行它时,只有一个测试用例是不正确的,其他的都是正确的。真运算符的惊人用法。我从中学到了很多。谢谢这只是一面旗帜。在这种情况下,这是一个非常非常普遍的概念。无论如何,时间限制已经超过了,所以我必须尝试另一种方法。
#n=int(input())
inp = ['cbabc', 'ab', 'zza', 'ba', 'nutforajarofatuna']
n = len(inp)
for i in range(n):
    x=list(inp[i])
    l=len(x)
    found = False
    for j in range(l):
        x.insert(j,"a")
        if x != x[::-1]:
            z=''.join(map(str,x))
            print("YES")
            print(z)
            found = True
        del x[j]
        if found: 
            break
    if not found:
        print("NO")