此代码是现在的工作:
def PalindromeSwapper(s):
length = len(s)
for idx, i in enumerate(s):
if idx == length-1: return -1 # if idx==length-1, then t[idx+1] will give IndexError
t = list(s) # make list, so swapping is possible
t[idx], t[idx+1] = t[idx+1], t[idx] # swap characters
t = ''.join(c for c in t) # rebuild string from list
if t == t[::-1]: return t # palindrome condition
有实际代码中的一些错误。第一个是s[idx],s[idx+1] == s[idx+1],s[idx]
,因为@Mark_M已经在评论中陈述了。第二个是把return -1
放在哪里,因为这种方式-1
在for循环的第一次迭代之后立即返回(即,当idx
是0
时,更大的idx
值甚至没有被检查)。
我希望你能理解这里介绍的代码是如何处理这些错误的。
由于以下两个例子表明,它可以养活s
和s[::-1]
进入功能非常有用获取有意义的回文(取决于两个字符的原始交换发生):
>>> PalindromeSwapper('kayka') # swaps the first two characters and finds palindrome
'akyka'
>>> PalindromeSwapper('kayka'[::-1])
'kayak'
https://codereview.stackexchange.com/questions/93225/checking-if-any-permutation-of-a-string-can-make-it-palindrome –
尝试打印s [idx],s [idx +1])'和'(s [idx + 1],s [idx])'并且询问这两个对的时间是否相等。这就是你正在测试的。然后对'(s [:]'和's [:: - 1])执行相同的操作''这个函数对于像yyaayy这样的字符串将返回true, –