题目
917. 仅仅反转字母
给你一个字符串 s ,根据下述规则反转字符串:
所有非英文字母保留在原有位置。
所有英文字母(小写或大写)位置反转。
返回反转后的 s 。
示例 1:
输入:s = "ab-cd"
输出:"dc-ba"
示例 2:
输入:s = "a-bC-dEf-ghIj"
输出:"j-Ih-gfE-dCba"
示例 3:
输入:s = "Test1ng-Leet=code-Q!"
输出:"Qedo1ct-eeLg=ntse-T!"
提示
- 1 <= s.length <= 100
- s 仅由 ASCII 值在范围 [33, 122] 的字符组成
- s 不含 ‘"’ 或 ‘\’
解题思路
- 双指针。
- 左边一个指针,右边一个指针。如果左边小于右边且同时扫描到字母,交换位置。
Code
class Solution:
def reverseOnlyLetters(self, s: str) -> str:
ans, left, right = list(s), 0, len(s) - 1
while True:
while left < right and not ans[left].isalpha():
left += 1
while left < right 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)
运行结果

该博客介绍了如何使用双指针算法解决字符串中仅反转字母的问题。给出了一种解决方案,通过两个指针从字符串两端开始,遇到字母时进行交换,非字母字符保持原位,最后得到反转的字母部分的字符串。
358

被折叠的 条评论
为什么被折叠?



