跳到主要内容

917.仅仅反转字母

· 阅读需 2 分钟

1、题干

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

        2、解题思路

        双指针遍历字符串,左右都是字母时交换位置


        3、代码

        var reverseOnlyLetters = function (s) {
        s = [...s];
        for (let l = 0, r = s.length - 1; l < r; l++, r--) {
        while (l < r && !(/[a-z]/i.test(s[l]))) l++;
        while (l < r && !(/[a-z]/i.test(s[r]))) r--;
        [s[l], s[r]] = [s[r], s[l]];
        }
        return s.join('');
        };

        4、执行结果

        image.png