我试图编写一个带有字符串的回文交换函数:
如果可以通过交换字符串中的两个相邻字符来创建回文,它应该返回回文(例如,对于输入字符串" 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
答案 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
(即当idx
为0
时, idx
的较大值甚至检查不会发生什么
我希望你能理解这里提供的代码如何解决这些错误。
正如以下两个示例所示,将s
和s[::-1]
提供给函数以获得有意义的回文(取决于两个字符的原始交换发生位置)非常有用:
>>> PalindromeSwapper('kayka') # swaps the first two characters and finds palindrome
'akyka'
>>> PalindromeSwapper('kayka'[::-1])
'kayak'