> 文章列表 > leetcode 917 仅仅反转字母

leetcode 917 仅仅反转字母

leetcode 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 不含 ‘"’ 或 ‘\\’

class Solution:def reverseOnlyLetters(self, s: str) -> str:ans = list(s)# 将字符串转换为列表便于操作l , r = 0 , len(s)-1   #双指针while l < len(s) - 1:  #开始遍历字符串while l < r and not s[l].isalpha():  #如果不是字母,则左指针向右移l += 1                       while l < r and not s[r].isalpha():  #如果不是字符,则右指针向左移r -= 1if l >= r:     #如果左指针大于等于右指针,则跳出循环breakans[l] , ans[r] = ans[r] , ans[l]  #左右指针的值交换l += 1  #左指针加一r -= 1   #有指针减一return ''.join(ans)  #将列表转换为字符串输出结果