leetcode-917-Reverse-Only-Letters

描述


Given a string S, return the “reversed” string where all characters that are not a letter stay in the same place, and all letters reverse their positions.

Example 1:

1
2
Input: "ab-cd"
Output: "dc-ba"

Example 2:

1
2
Input: "a-bC-dEf-ghIj"
Output: "j-Ih-gfE-dCba"

Example 3:

1
2
Input: "Test1ng-Leet=code-Q!"
Output: "Qedo1ct-eeLg=ntse-T!"

分析


双指针,从两边向中间靠近,将前后的字符进行交互,即可达到倒转的目的。

解决方案1(Java)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public String reverseOnlyLetters(String S) {
char[] sCharsArray = S.toCharArray();
int left = 0, right = sCharsArray.length - 1;
while(left < right) {
while(left < right && !Character.isLetter(sCharsArray[left])) {
left++;
}
while(left < right && !Character.isLetter(sCharsArray[right])) {
right--;
}
char tmp = sCharsArray[left];
sCharsArray[left] = sCharsArray[right];
sCharsArray[right] = tmp;
left++;
right--;
}
return new String(sCharsArray);
}
}

题目来源