【蓝桥Java每日一题】——13.仅仅反转字母

简介: 【蓝桥Java每日一题】——13.仅仅反转字母

🍋1.仅仅反转字母


给你一个字符串 s ,根据下述规则反转字符串:


  • 所有非英文字母保留在原有位置。
  • 所有英文字母(小写或大写)位置反转。


返回反转后的s。


题目链接:仅仅反转字母https://leetcode-cn.com/problems/reverse-only-letters/


image.png

        从题目的要求来看,是一道很基础的双指针问题,但细节把握不好还是容易error。就是先需要左右指针分别找到一个最左的字符和最右的字符进行交换。然后继续向内移动继续重复操作,直到左右指针相遇则完成任务。看上去如此简单(确实也简单哈哈哈),但还是有一点易错的地方。


       在左指针往左移动寻找字符的过程中和右指针向左移动的过程中,一定要保证l<r。不然如果给定字符串没有字母,左右指针都可能无止境的移动造成数组越界。


       依据上意给出代码


class Solution {
    public String reverseOnlyLetters(String s) {
        char[] arr=s.toCharArray();
        int n=arr.length;
        int l=0;
        int r=n-1;
        while(l<r){
            while(l<r&&!check(arr[l])) l++;
            while(r>l&&!check(arr[r])) r--;
                char a=arr[l];
                arr[l++]=arr[r];
                arr[r--]=a;
        }
        return new String(arr);
    }
    boolean check(char a){
        return ('a'<=a&&a<='z')||('A'<=a&&a<='Z');
    }
}


相关文章
|
4月前
|
存储 Java
17. 电话号码的字母组合 --力扣 --JAVA
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
47 0
|
3月前
|
Java API Apache
探讨Java中检测字符串是否包含数字和字母的技术
探讨Java中检测字符串是否包含数字和字母的技术
33 2
|
3月前
|
Java
使用java计算一个字符串中字母出现的次数
使用java计算一个字符串中字母出现的次数
|
3月前
|
存储 算法 Java
【经典算法】LeetCode 1170:比较字符串最小字母出现频次(Java/C/Python3实现含注释说明,中等)
【经典算法】LeetCode 1170:比较字符串最小字母出现频次(Java/C/Python3实现含注释说明,中等)
23 0
|
4月前
|
Java
java判断字符串中有多少数字字母或者符号
java判断字符串中有多少数字字母或者符号
|
4月前
|
Java Go C++
Java每日一练(20230420) 罗马数字转整数、电话号码的字母组合、排列序列
Java每日一练(20230420) 罗马数字转整数、电话号码的字母组合、排列序列
45 0
Java每日一练(20230420) 罗马数字转整数、电话号码的字母组合、排列序列
|
4月前
|
Python Java Go
Java每日一练(20230403) 字母异位词分组、删除链表的倒数第 N 个结点、合并区间
Java每日一练(20230403) 字母异位词分组、删除链表的倒数第 N 个结点、合并区间
46 0
Java每日一练(20230403) 字母异位词分组、删除链表的倒数第 N 个结点、合并区间
|
4月前
|
Java
LeetCode-电话号码的字母组合-Java
电话号码的字母组合-Java
26 0
|
Java
蓝桥杯 基础练习 字母图形(Java)
蓝桥杯 基础练习 字母图形(Java)
104 0
|
Java
java栈-点击消除相邻重复的字母
给出一个字符串,每次“点击”,可以把字符串中相邻两个相同字母消除,例如,字符串"abbc"点击后可以生成"ac"。 但相同而不相邻、不相同的相邻字母都是不可以被消除的。如果一直点击,字符串的最终形态是什么?
79 0