🍋1.仅仅反转字母
给你一个字符串 s ,根据下述规则反转字符串:
- 所有非英文字母保留在原有位置。
- 所有英文字母(小写或大写)位置反转。
返回反转后的s。
题目链接:仅仅反转字母https://leetcode-cn.com/problems/reverse-only-letters/
从题目的要求来看,是一道很基础的双指针问题,但细节把握不好还是容易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'); } }