写在前面:本文题单均来自力扣的算法刷题计划,开这个系列主要是以题目与题解的形式对一些常见、常用算法进行归类和总结,希望在促进自己学习的同时也能帮助到看到这篇文章的大家。另外,本文并非一天一更~(对没错还是我双指针)
目录
题目一:344. 反转字符串
题目描述:
题目分析:
这题本质就是轴对称翻转,只需以字符串长度的中心为截止点,再设置两个头尾指针,让它们向中心移动,用 swap 函数交换两个指针指向的字符即可。
题解代码:
class Solution {
public:
void reverseString(vector<char>& s) {
for(int i=0,j=s.size()-1;i<s.size()/2;i++,j--)
{
swap(s[i],s[j]);
}
}
};
题目二:557. 反转字符串中的单词 III
题目描述:
题目分析:
这题首先设置一个变量来循环整个字符串,当遇到空格或截止符(' \0 ')时,对这个位置前一段字符串进行翻转即可。
对于某段字符串的翻转处理,我们再使用两个指向这段字符串头和尾的头尾指针,然后边交换指向的字符,边向中心移动,直到头尾指针相遇。
另外,要处理的第一段字符串头指针位置是0,尾指针位置是则是遇到空格或截止符(' \0 ')的位置减 1 ,然后头指针的位置始终是遇到的空格或截止符(' \0 ')的位置加 1 ,尾指针位置与上述一致。
题解代码:
class Solution {
public:
string reverseWords(string s) {
int begin=0,end;
for(int i=0;i<s.size()+1;i++)
{
if(s[i]==' '||s[i]=='\0')
{
for(end=i-1;begin<end;begin++,end--)
{
swap(s[begin],s[end]);
}
begin=i+1;
}
}
return s;
}
};