
遇到出入顺序的问题,可以用栈
方法 1:字母栈
想法和算法
将 s 中的所有字母单独存入栈中,所以出栈等价于对字母反序操作。(或者,可以用数组存储字母并反序数组。)
然后,遍历 s 的所有字符,如果是字母我们就选择栈顶元素输出。
class Solution:
def reverseOnlyLetters(self, S: str) -> str:
# 使用字母栈
letters = [c for c in S if c.isalpha()]
ans = []
print(letters)
for c in S:
if c.isalpha():
ans.append(letters.pop())
else:
ans.append(c)
return "".join(ans)
方法 2:反转指针
想法
一个接一个输出 s 的所有字符。当遇到一个字母时,我们希望找到逆序遍历字符串的下一个字母。
所以我们这么做:维护一个指针 j 从后往前遍历字符串,当需要字母时就使用它。
class Solution:
def reverseOnlyLetters(self, S: str) -> str:
# 反转指针
ans = []
j = len(S) - 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)
原文:https://www.cnblogs.com/GumpYan/p/13045600.html