917. 仅仅反转字母
难度简单
给你一个字符串 s
,根据下述规则反转字符串:
- 所有非英文字母保留在原有位置。
- 所有英文字母(小写或大写)位置反转。
返回反转后的 s
* 。*
我的题解
确实是简单题,栈思想
class Solution:
def reverseOnlyLetters(self, s: str) -> str:
arr = []
for n,c in enumerate(s):
if c.isalpha():
arr.append(c)
ls = list(s)
for n,c in enumerate(s):
if c.isalpha():
ls[n] = arr.pop()
return ''.join(ls)
官方题解:双指针
class Solution:
def reverseOnlyLetters(self, s: str) -> str:
ans = list(s)
left, right = 0, len(ans) - 1
while True:
while left < right and not ans[left].isalpha(): # 判断左边是否扫描到字母
left += 1
while right > left and not ans[right].isalpha(): # 判断右边是否扫描到字母
right -= 1
if left >= right:
break
ans[left], ans[right] = ans[right], ans[left]
left += 1
right -= 1
return ''.join(ans)
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/reverse-only-letters/solution/jin-jin-fan-zhuan-zi-mu-by-leetcode-solu-db20/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。