2017-07-29 39 views
0

我想写交换技术功能的回文这需要一个字符串:Python的回文交换技术

如果回文可以通过字符串应该返回回文(用于例如,在交换两个相邻的字符来创建输入字符串“kyaak”,如果我们交换索引1和2中的字符,形成“回文”是回文)否则它应该返回字符串-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 
+0

https://codereview.stackexchange.com/questions/93225/checking-if-any-permutation-of-a-string-can-make-it-palindrome –

+1

尝试打印s [idx],s [idx +1])'和'(s [idx + 1],s [idx])'并且询问这两个对的时间是否相等。这就是你正在测试的。然后对'(s [:]'和's [:: - 1])执行相同的操作''这个函数对于像yyaayy这样的字符串将返回true, –

回答

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放在哪里,因为这种方式-1在for循环的第一次迭代之后立即返回(即,当idx0时,更大的idx值甚至没有被检查)。
我希望你能理解这里介绍的代码是如何处理这些错误的。

由于以下两个例子表明,它可以养活ss[::-1]进入功能非常有用获取有意义的回文(取决于两个字符的原始交换发生):

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