给定一个字符串 S ,返回 “反转后的” 字符串,其中不是字母的字符都保留在原地,而所有字母的位置发生反转。
class Solution {
//双指针
public String reverseOnlyLetters(String S) {
char[] ch = S.toCharArray();
int l = 0;
int r = ch.length - 1;
//大循环,一直到l大于r为止
while (l < r) {
//l小循环,判断目前的l下标是否为字母,如果不是字母,移到下一位,一直移到字母为止
// A-Z:65-90 a-z:97-122
while (l < r && (ch[l] < 'A' || (ch[l] > 'Z' && ch[l] < 'a') || ch[l] > 'z')) l++;
//r小循环,判断目前的l下标是否为字母,如果不是字母,移到下一位,一直移到字母为止
while (l < r && (ch[r] < 'A' || (ch[r] > 'Z' && ch[r] < 'a') || ch[r] > 'z')) r--;
//交换位置
if (l < r) {
char c = ch[l];
ch[l++] = ch[r];
ch[r--] = c;
}
}
return String.valueOf(ch);
}
}