LeetCode917. 仅仅反转字母

104 阅读1分钟

原题地址:leetcode-cn.com/problems/re…

image.png

思路: 双指针, 可以先将特殊字符放到新的数组, 然后遍历, 依次将空白填上即可.

class Solution {
    public String reverseOnlyLetters(String s) {
        char[] result = new char[s.length()];
        char[] charArray = s.toCharArray();
        for (int i = 0; i < charArray.length; i++) {
            if (charArray[i] < 65 || (charArray[i] > 90 && charArray[i] < 97) || charArray[i] > 122) {
                result[i] = charArray[i];
            }
        }
        int i = 0, j = charArray.length - 1;
        while (i < charArray.length) {
            if (result[i] != '\u0000') {
                i++;
            } else if (charArray[j] < 65 || (charArray[j] > 90 && charArray[j] < 97) || charArray[j] > 122) {
                j--;
            } else {
                result[i++] = charArray[j--];
            }
        }
        return new String(result);
    }
}