917.仅仅反转字母

仅仅反转字母

给你一个字符串 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 不含 ‘"‘ 或 ‘\‘

解析

使用双指针,从两端向中间遍历,遇到字母就交换。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var reverseOnlyLetters = function (s) {
const arr = s.split("");
let left = 0,
right = arr.length - 1;

const isLetter = (c) => /[a-zA-Z]/.test(c);

while (left < right) {
while (left < right && !isLetter(arr[left])) left++;
while (left < right && !isLetter(arr[right])) right--;
if (left < right) {
[arr[left], arr[right]] = [arr[right], arr[left]];
left++;
right--;
}
}

return arr.join("");
};

时间复杂度 O(n),空间复杂度 O(n)。


917.仅仅反转字母
https://leetcode.lz5z.com/917.reverse-only-letters/
作者
tickli
发布于
2024年12月24日
许可协议