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 <= 10033 <= 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; }}