传送门:仅仅反转字母
给你一个字符串 s ,根据下述规则反转字符串:
所有非英文字母保留在原有位置。
所有英文字母(小写或大写)位置反转。
返回反转后的 s 。
示例 1:
输入:s = "ab-cd"
输出:"dc-ba"
示例 2:
输入:s = "a-bC-dEf-ghIj"
输出:"j-Ih-gfE-dCba"
示例 3:
输入:s = "Test1ng-Leet=code-Q!"
输出:"Qedo1ct-eeLg=ntse-T!"
思路:
代码:
class Solution
{
public:
bool ISLetter(char ch)
{
if((ch >= 'a' && ch <= 'z')
|| (ch >= 'A' && ch <= 'Z'))
return true;
else
return false;
}
string reverseOnlyLetters(string s)
{
size_t begin = 0;
size_t end = s.size()-1;//注意size()指向的是字符串最后的那个\0
while(begin < end)
{
while(begin < end && !ISLetter(s[begin]))
++begin;
while(begin < end && !ISLetter(s[end]))
--end;
swap(s[begin], s[end]);
++begin;
--end;
}
return s;
}
};
当然库里面有个判断是否是字母的函数,可以直接调用
while(begin < end && !isalpha(s[begin]))
++begin;