题目
类型:双指针
解题思路
每次都使用 i 和 j 分别指向左端和右端可以被交换的字母,若当前指针指向的不是字母,则分别往中间移动,直到找到下一个可交换的字母位置,每次交换结束,两指针均往中间移动一位。
代码
class Solution {
public String reverseOnlyLetters(String s) {
char[] cs = s.toCharArray();
int n = cs.length;
for (int i = 0, j = n - 1; i < j; ) {
while (i < j && !Character.isLetter(cs[i])) i++;
while (i < j && !Character.isLetter(cs[j])) j--;
if (i < j) {
char c = cs[i];
cs[i++] = cs[j];
cs[j--] = c;
}
}
return String.valueOf(cs);
}
}