---
# System prepended metadata

title: 917. Reverse Only Letters  仅仅反转字母 【string】 【easy】

---

# 917. Reverse Only Letters  仅仅反转字母 【string】 【easy】
給你一個字符串 s ，根據下述規則反轉字符串：

所有非英文字母保留在原有位置。
所有英文字母（小寫或大寫）位置反轉。
返回反轉後的 s 。

示例 1：

```
輸入：s = "ab-cd"
輸出："dc-ba"
```
示例 2：

```
輸入：s = "a-bC-dEf-ghIj"
輸出："j-Ih-gfE-dCba"
```
示例 3：

```
輸入：s = "Test1ng-Leet=code-Q!"
輸出："Qedo1ct-eeLg=ntse-T!"
```

思路：
用left、right指標分別指向字串的頭尾，如果遇到的字元不是字母的話，指標分別往中間移動，停下來的時候，代表分別指向字母，交換左右兩指針的字元，直到字元會合。

```java=
class Solution {
    public String reverseOnlyLetters(String s) {
        int left = 0, right = s.length()-1;
        char[] cs = s.toCharArray();
        while(left<right){
            while(left<right && !Character.isLetter(cs[left])) left++;
            while(left<right && !Character.isLetter(cs[right])) right--;
            if(left<right){
                char tmp = cs[left];
                cs[left++] = cs[right];
                cs[right--] = tmp;
            }
        }
        return String.valueOf(cs);
    }
    
}
```
