Python Palindrome交换器

时间:2017-07-29 03:30:57

标签: string python-3.x palindrome

我试图编写一个带有字符串的回文交换函数:

如果可以通过交换字符串中的两个相邻字符来创建回文,它应该返回回文(例如,对于输入字符串" kyaak",如果我们交换索引1和2中的字符,&# 34;皮划艇"形成,它是一个回文)否则它应该返回字符串-1。这里有什么问题?

def PalindromeSwapper(s): 
    for idx,i in enumerate(s[:]):
        if (s[idx],s[idx+1]  == s[idx+1],s[idx]) and (s[:] == s[::-1]):
            return s[:]
        else:
            return -1

1 个答案:

答案 0 :(得分:0)

此代码现在正在运行:

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放在你放置它的位置,因为在for循环的第一次迭代之后立即返回-1(即当idx0时, idx的较大值甚至检查不会发生什么 我希望你能理解这里提供的代码如何解决这些错误。

正如以下两个示例所示,将ss[::-1]提供给函数以获得有意义的回文(取决于两个字符的原始交换发生位置)非常有用:

>>> PalindromeSwapper('kayka')  # swaps the first two characters and finds palindrome
'akyka'
>>> PalindromeSwapper('kayka'[::-1])
'kayak'