给你一个字符串 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!”

    提示

    1 <= s.length <= 100
    s 仅由 ASCII 值在范围 [33, 122] 的字符组成
    s 不含 ‘\”‘ 或 ‘\‘


    1. class Solution {
    2. public String reverseOnlyLetters(String s) {
    3. char[] ch = s.toCharArray();
    4. int n =ch.length;
    5. int l = 0, r = n - 1;
    6. while (l < r) {
    7. while (l < r && (ch[l] > 'Z' || ch[l] < 'A') && (ch[l] > 'z' || ch[l] < 'a')) l++;
    8. while (l < r && (ch[r] > 'Z' || ch[r] < 'A') && (ch[r] > 'z' || ch[r] < 'a')) r--;
    9. if (l < r) {
    10. char t = ch[l];
    11. ch[l++] = ch[r];
    12. ch[r--] = t;
    13. }
    14. }
    15. return String.valueOf(ch);
    16. }
    17. }