⭐️引言⭐️
大家好啊,我是执梗。最近刚开学,天天都是满课,把孩子都上懵逼了,说好假期万粉结果现在也还差一点达到目标。只能趁水课更新一下今天的每日一题,简单题嘿嘿嘿😂
⭐️精彩回放⭐️
2022.2.18——Java每日一练【蓝桥Java每日一题】——12.可获得的最大点数2022.2.2——Java每日一练【蓝桥Java每日一题】——11.做菜顺序(贪心秒杀困难题)2022.1.25——Java每日一练【蓝桥Java每日一题】——10.长度最小的子数组2022.1.18——Java每日一练【蓝桥Java每日一练】——9.回文链表2022.1.16——Java每日一练【蓝桥Java每日一练】——8.计算力扣银行的钱
🍋1.仅仅反转字母
给你一个字符串
s
,根据下述规则反转字符串:
- 所有非英文字母保留在原有位置。
- 所有英文字母(小写或大写)位置反转。
返回反转后的s。
题目链接:仅仅反转字母
从题目的要求来看,是一道很基础的双指针问题,但细节把握不好还是容易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');
}
}
日常练习题打卡。
** 看完如果让你有一丝收获,球球感谢给一个三连支持!!!**
版权归原作者 执 梗 所有, 如有侵权,请联系我们删除。