给定一个字符串 S,返回 “反转后的” 字符串,其中不是字母的字符都保留在原地,而所有字母的位置发生反转。
示例:
输入:“ab-cd”
输出:“dc-ba”
提示:
- S.length <= 100
- 33 <= S[i].ASCIIcode <= 122
- S 中不包含 \ or "
思路:
- 首先定义两个变量begin和end,begin记录字符串的首位置,end记录字符串的尾
- 其次如果begin和end记录的位置都是字母时,这两个位置的字母进行交换
- 最后begin和end跳向下一个位置直到begin和end指向的是字母,依次往复,直到begin>=end的时,反转结束
代码如下:
class Solution
{
public:
bool isLetter(char ch) // 判断一个字符是否为字母
{
if(ch>='a'&&ch<='z') //小写
return true;
if(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&&!isLetter(s[begin])) //防止越界访问(begin<end)
{
begin++;
}
while(begin<end&&!isLetter(s[end]))
{
end--;
}
swap(s[begin],s[end]);//交换字母
begin++;
end--;
}
return s;//返回反转后的字符串
}
};