云小杰

相对于绝对成功的汲汲渴求,越无杂质的奔赴,越是动人。

要一个黄昏, 满是风, 和正在落下的夕阳。如此, 足够我爱这破碎泥泞的人间。


Download the theme

仅仅反转字母

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!"

方法:双指针

​ 整体而言,这个题目还是比较简单的,双指针的想法也比较容易想到。我们可以设置 leftright 两个指针,分别从字符串 s 的首尾开始遍历。只要 leftright 指向的是字母,且 left< right ,那我们就交换两个下标的值。

class Solution {
    public String reverseOnlyLetters(String s) {
        char[] chars = s.toCharArray();
        int left = 0, right = chars.length - 1;
        while (left < right) {
            while (left < right && !Character.isLetter(s.charAt(left))) { // 判断左边是否扫描到字母
                left++;
            }
            while (right > left && !Character.isLetter(s.charAt(right))) { // 判断右边是否扫描到字母
                right--;
            }
            if (left < right) {
                char temp = chars[left];
                chars[left] = chars[right];
                chars[right] = temp;
                ++left;
                --right;
            }
        }
        return new String(chars);
    }
}
最近的文章

找不同

389. 找不同题目描述给定两个字符串 s 和 t ,它们只包含小写字母。字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。请找出在 t 中被添加的字母。示例 1:输入:s = "abcd", t = "abcde"输出:"e"解释:'e' 是那个被添加的字母。示例 2:输入:s = "", t = "y"输出:"y"方法一:统计每个字母出现次数​ 我看到这个题目的第一反应是用两个数组 a 和 b 分别统计字符串 s 和 t 中每个字符出现的次数,然后遍历两个数组,数组b 比...…

继续阅读
更早的文章

下一个排列

下一个排列 题目描述 方法 下一个排列题目描述实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须 原地 修改,只允许使用额外常数空间。示例 1:输入:nums = [1,2,3]输出:[1,3,2]示例 2:输入:nums = [3,2,1]输出:[1,2,3]示例 3:输入:nums = [1,1,5]输出:[1,5,1]示例 4:输...…

Blog继续阅读