题目描述
给定一个字符串 S,返回 “反转后的” 字符串,其中不是字母的字符都保留在原地,而所有字母的位置发生反转。
- 示例 1:
- 输入:“ab-cd”
- 输出:“dc-ba”
- 示例 2:
- 输入:“a-bC-dEf-ghIj”
- 输出:“j-Ih-gfE-dCba”
题解
1.定义两个指针begin和end分别指向字符串的头和尾。
2.遍历字符串S,如果指针所指内容是字母,则交换begin和end所指内容。
3.如果不是字母则将begin后移一个位置,直至begin所指为字母;对end同理。
class Solution {
public:
bool Ischar(const char& ch){
if((ch>='a' && ch<='z') || (ch>='A' && ch<='Z'))
return true;
return false;
}
string reverseOnlyLetters(string S) {
int begin=0;
int end=S.size()-1;
while(begin < end){
//如果不是字符
while(begin<end && Ischar(S[begin])==false)
++begin; //后移
while(begin<end && Ischar(S[end])==false)
--end; //前移
swap(S[begin++],S[end--]);
}
return S;
}
};