双指针法是字符串处理的常客
知识点
1.erase的时间复杂度是O(n)
2.库函数一般左闭右开。
3.<algorithm> 头文件包含了许多常用的算法函数,这些函数可以用于对数组、容器(如 vector、
list)以及其他可迭代的序列进行操作。常见的算法函数包括排序、查找、排列、合并等操作。
151.翻转字符串里的单词
字符串复杂操作拿捏了! | LeetCode:151.翻转字符串里的单词
解题思路如下:
- 移除多余空格
- 将整个字符串反转
- 将每个单词反转
removeExtraSpaces 函数的实现使用了双指针。
代码
class Solution {
public:
void removeExtraSpaces(string& s)
{
int slow=0,fast=0;
while(fast<s.size())
{
if(s[fast]!=' ')
{
if(slow!=0)
s[slow++]=' ';
while(s[fast]!=' '&&fast<s.size())
s[slow++]=s[fast++];
}
else
fast++;
}
s.resize(slow);
}
string reverseWords(string s)
{
removeExtraSpaces(s);
int start=0;
reverse(s.begin(),s.end());
for(int i=0;i<=s.size();i++)
{
if(s[i]==' '||i==s.size())
{
reverse(s.begin()+start,s.begin()+i);
start=i+1;
}
}
return s;
}
};
55. 右旋字符串
分为前后两部分,整体反转+局部反转
代码
#include <iostream>
#include<algorithm>
using namespace std;
int main()
{
int k;
string s;
cin>>k>>s;
reverse(s.begin(),s.end());
reverse(s.begin(),s.begin()+k);
reverse(s.begin()+k,s.end());
cout<<s;
}