【简单】
class Solution:
def reverseOnlyLetters(self, S):
"""
:param S: str
:return: str
"""
S=list(S)
s_alpha=[i for i in S if i.isalpha()]
reversed_alpha=list(reversed(s_alpha))
index=0
for i in range(len(S)):
if S[i].isalpha():
S[i]=reversed_alpha[index]
index+=1
return ''.join(str(S[i]) for i in range(len(S)))
1.记录S中出现的字母====>反转
2.遍历S,若是字母就将反转后的值赋值到S中相应的地方
3.还有其他的方法,都很不错,比如双指针和利用python中字典的哈希表特性来做。
S="Test1ng-Leet=code-Q!" #input
#output="Qedo1ct-eeLg=ntse-T!"
class Solution:
def reverseOnlyLetters(self, S):
"""
:param S: str
:return: str
"""
S = list(S)
left, right = 0, len(S)-1
while left < right:
if not S[left].isalpha():
left += 1
elif not S[right].isalpha():
right -= 1
else:
S[left], S[right] = S[right], S[left]
left += 1
right -= 1
return ''.join(S)
class Solution:
def reverseOnlyLetters(self, S):
"""
:param S: str
:return: str
"""
loc = {i: c for i, c in enumerate(S)}
alpha = {i: c for i, c in loc.items() if c.isalpha()}
reversed_alpha = {i: c for i, c in zip(reversed(list(alpha.keys())), alpha.values())} #zip([iterable, ...])
loc.update(reversed_alpha)
return ''.join([loc[i] for i in range(len(S))])