Problem
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:
Input: "ab-cd"
Output: "dc-ba"
Example 2:
Input: "a-bC-dEf-ghIj"
Output: "j-Ih-gfE-dCba"
Example 3:
Input: "Test1ng-Leet=code-Q!"
Output: "Qedo1ct-eeLg=ntse-T!"
Note:
S.length <= 100
33 <= S[i].ASCIIcode <= 122
S doesn't contain \ or "
Solution
class Solution {
public String reverseOnlyLetters(String S) {
char[] str = S.toCharArray();
int i = 0, j = str.length-1;
while (i < j) {
while (i < j && !Character.isLetter(str[i])) i++;
while (i < j && !Character.isLetter(str[j])) j--;
swap(str, i++, j--);
}
StringBuilder sb = new StringBuilder();
sb.append(str);
return sb.toString();
}
private void swap(char[] str, int i, int j) {
char temp = str[i];
str[i] = str[j];
str[j] = temp;
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。