題目:僅僅反轉字母
給定一個字串 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);
}
}複製程式碼