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)将String转换为数组;
2)设定两个指针,一左一右遍历数组,在两者都为英文字母时,位置反转。

Java代码

class Solution {
    public String reverseOnlyLetters(String s) {
        int left = 0, right = s.length() - 1;
        char[] array = new char[s.length()]; 
        array = s.toCharArray();  # 1)将String转换为array
        while(true){
            while(left < right && !Character.isLetter(array[left])){  # 2)判断左边指针指向的是否为英文字母
               left++; 
            }
            while(left < right && !Character.isLetter(array[right])){  # 2)判断右边指针指向的是否为英文字母
                right--;    
            }
            if (left >= right) {  # 3)##注意:左右两边指针遍历后,要保证左边指针始终在右边指针的左边。这样就不会使得两边指针重复遍历,发生错误。##
                break;
            }
            char temp = array[left];
            array[left] = array[right];
            array[right] = temp;
            left++;
            right--;
        }
        return new String(array);
    }
}

注意程序注释中的第三点,是容易出错忽视的关键点。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 题目:给定一个字符串 S,返回 “反转后的” 字符串,其中不是字母的字符都保留在原地,而所有字母的位置发生反转。 ...
    小亮_39ed阅读 154评论 0 0
  • 题目 难度:★☆☆☆☆类型:字符串 给定一个字符串 S,返回 “反转后的” 字符串,其中不是字母的字符都保留在原地...
    玖月晴阅读 1,026评论 0 0
  • 917. 仅仅反转字母 给定一个字符串 S,返回 “反转后的” 字符串,其中不是字母的字符都保留在原地,而所有字母...
    一角钱技术阅读 289评论 0 0
  • 【题目描述】给定一个字符串 S,返回 “反转后的” 字符串,其中不是字母的字符都保留在原地,而所有字母的位置发生反...
    1江春水阅读 346评论 0 0
  • 917. 仅仅反转字母 URL 给定一个字符串 S,返回 “反转后的” 字符串,其中不是字母的字符都保留在原地,而...
    鱼欲遇雨阅读 272评论 0 0

友情链接更多精彩内容