917. 仅仅反转字母『简单』

题目来源于力扣(LeetCode

一、题目

917. 仅仅反转字母

题目相关标签:字符串

提示:

  • S.length <= 100
  • 33 <= S[i].ASCIIcode <= 122
  • S 中不包含 \ or "

二、解题思路

  1. 定义左右指针,遍历字符串 s

  2. 左指针右移查找字母字符元素,为字母时,右指针左移查找字母字符元素

  3. 左右指针均为字母字符元素时,完成交换

三、代码实现

public static String reverseOnlyLetters(String S) {
    int left = 0;
    int right = S.length() - 1;

    char[] arr = S.toCharArray();
    while (left < right) {
        if (isLetter(arr[left])) {
            // 左侧满足条件时,判断右侧
            if (isLetter(arr[right])) {
                // 右侧索引上字符也是字母时,交换
                char temp = arr[left];
                arr[left] = arr[right];
                arr[right] = temp;
                left ++;
            }
            // 右侧向左侧移动
            right --;
        } else {
            left ++;
        }
    }
    return String.valueOf(arr);
}

// 判断字符是否是字母(大写与小写都算)
public static boolean isLetter(char a) {
    return (a >= 'a' && a <= 'z') || (a >= 'A' && a <= 'Z');
}

四、执行用时

五、部分测试用例

public static void main(String[] args) {
    String s = "ab-cd";  // output: "dc-ba"
//    String s = "a-bC-dEf-ghIj";  // output: "j-Ih-gfE-dCba"
//    String s = "Test1ng-Leet=code-Q!";  // output: "Qedo1ct-eeLg=ntse-T!"

    String result = reverseOnlyLetters(s);
    System.out.println(result);
}
posted @ 2020-07-01 20:59  知音12138  阅读(195)  评论(0编辑  收藏  举报