【题目】
给定一个字符串 S,返回 “反转后的” 字符串,其中不是字母的字符都保留在原地,而所有字母的位置发生反转。
示例 :
输入:"ab-cd"
输出:"dc-ba"
示例 :
输入:"a-bC-dEf-ghIj"
输出:"j-Ih-gfE-dCba"
示例 :
输入:"Test1ng-Leet=code-Q!"
输出:"Qedo1ct-eeLg=ntse-T!"
提示:
S.length <= 100 33 <= S[i].ASCIIcode <= 122 S 中不包含 \ or "
【思路】
使用两指针i和j,分别从字符串两端开始遍历,当S[i]和S[j]都是字母时,交换。
【代码】
python版本
class Solution(object):
def reverseOnlyLetters(self, S):
"""
:type S: str
:rtype: str
"""
i =
j = len(S) -
while i < j:
# 保证S[i]和S[j]都是字符
if 'a' <= S[i] <= 'z' or 'A' <= S[i] <= 'Z':
pass
else:
i +=
continue
if 'a' <= S[j] <= 'z' or 'A' <= S[j] <= 'Z':
pass
else:
j -=
continue
S = S[:i] + S[j] + S[i+:j] + S[i] + S[j+:]
i +=
j -=
return S
C++版本
class Solution {
public:
string reverseOnlyLetters(string S) {
int i = ;
int j = S.size() - ;
while(i < j){
if((S[i] < 'a' || S[i] > 'z') && (S[i] < 'A' || S[i] > 'Z')){
i++;
continue;
}
if((S[j] < 'a' || S[j] > 'z') && (S[j] < 'A' || S[j] > 'Z')){
j--;
continue;
}
char tmp = S[i];
S[i] = S[j];
S[j] = tmp;
i++;
j--;
}
return S;
}
};