LeetCode每日一題: 僅僅反轉字母(No.917)

胖宅老鼠發表於2019-04-04

題目:僅僅反轉字母


給定一個字串 S,返回 “反轉後的” 字串,其中不是字母的字元都保留在原地,而所有字母的位置發生反轉。
複製程式碼

示例:


 輸入:"ab-cd"
 輸出:"dc-ba"
 
 輸入:"a-bC-dEf-ghIj"
 輸出:"j-Ih-gfE-dCba"
 
 輸入:"Test1ng-Leet=code-Q!"
 輸出:"Qedo1ct-eeLg=ntse-T!"
複製程式碼

思考:


字串轉字元陣列,定義兩個指標,一個從前往後一個從後向前,判斷當兩個指標指向的字元都是字母時,交換字元位置。
若指向元素不為字母,則將指標向前或者向後移動,不做交換。
複製程式碼

實現:


class Solution {
    public String reverseOnlyLetters(String S) {
        int start = 0;
        int end = S.length() - 1;
        char[] chars = S.toCharArray();
        while (start < end) {
            if ((chars[start] <= 'z' && chars[start] >= 'a') || (chars[start] >= 'A' && chars[start] <= 'Z')) {
                if ((chars[end] <= 'z' && chars[end] >= 'a') || (chars[end] >= 'A' && chars[end] <= 'Z')) {
                    chars[start] = (char) (chars[start] ^ chars[end]);
                    chars[end] = (char) (chars[start] ^ chars[end]);
                    chars[start] = (char) (chars[start] ^ chars[end]);
                    start++;
                    end--;
                } else {
                    end--;
                }
            } else {
                start++;
            }
        }
        return String.valueOf(chars);
    }
}複製程式碼

相關文章