Problem Statement
leetcode problem link
My Solution [Accepted]
class Solution:
def reverseOnlyLetters(self, s: str) -> str:
reversed_s = [c for c in s if c.isalpha()]
l, r = 0, len(reversed_s) - 1
while l < r:
reversed_s[l], reversed_s[r] = reversed_s[r], reversed_s[l]
l += 1
r -= 1
res = []
j = 0
for i, c in enumerate(s):
if c.isalpha():
res.append(reversed_s[j])
j += 1
else:
res.append(c)
return "".join(res)
Editorial
Approach 1: Stack of Letters
class Solution(object):
def reverseOnlyLetters(self, S):
letters = [c for c in S if c.isalpha()]
ans = []
for c in S:
if c.isalpha():
ans.append(letters.pop())
else:
ans.append(c)
return "".join(ans)
Approach 2: Reverse Pointer
class Solution(object):
def reverseOnlyLetters(self, S):
ans = []
j = len(ans) - 1
for i, x in enumerate(S):
if x.isalpha():
while not S[j].isalpha():
j -= 1
ans.append(S[j])
j -= 1
else:
ans.append(x)
return "".join(ans)