在学习之余对于知识的巩固也尤为重要,不论难度高低,都会对代码的理解有所加深,下面我们开始练习
思路解析
关于本题的核心思路就是如何判断字符串中元素是否为字母以及如何遍历字符串以达到仅反转的目的,这里用到的知识就是关于 string 类的下标访问元素,下面我们用代码对其解释
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 left = 0,right = s.size() - 1;
while(left < right)
{
while(left < right && !isLetter(s[left]))
{
left++;
}
while(left < right && !isLetter(s[right]))
{
right--;
}
swap(s[left++],s[right--]);
}
return s;
}
};
代码分析
1. 首先写一个函数判断字符串元素是否为字母,当然也可以使用库中定义好的 isalpha 函数,这里为了好理解就直接手写一个函数进行判断即可
2. 这里使用 string 类中的 string::size 接口拿到了字符串长度,然后开始首尾向中间遍历
3. 注意判断时为了避免越界要将 left < right 写在每一个循环中
4. 最后双指针相遇时即遍历完成,这时使用库中定义好的 swap 函数交换即可