このコードは、今取り組んでいる:
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
あなたのコード内のいくつかの間違いが実際にありました。最初のコメントは@ Mark_Mがコメントに記載されているようにs[idx],s[idx+1] == s[idx+1],s[idx]
でした。 2番目の方法は、-1
がforループの最初の繰り返しの直後に返されるためです(つまり、idx
が0
の場合、大きな値のidx
の場合もチェックされません)。
こちらのコードがどのようにこれらの間違いを処理するのかをご理解いただければ幸いです。
2次の例が示すように、(2つの文字の本来のスワップが行われた場所に応じて)理にかなって回文を取得する関数に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" –