344. 反转字符串
添加链接描述
这道题主要就是reverse,可以直接用,也可以手写一个
代码:
class Solution {
public:
void reverseString(vector<char>& s) {
int i=0,j=s.size()-1;
while(i<j)
{
swap(s[i],s[j]);
i++;
j--;
}
}
};
541. 反转字符串 II
添加链接描述
做题时不太理解reverse函数的用法,它的第二个迭代器指的是元素最后一个的下一个位置
class Solution {
public:
string reverseStr(string s, int k) {
//s.end()指向的是最后一个元素的写一个的位置,在 reverse 算法中,它不会改变 a.end() 的位置
for(int left=0;left<s.size();left+=2*k)
{
if(left+k<s.size()) reverse(s.begin()+left,s.begin()+left+k);
else reverse(s.begin()+left,s.end());
}
return s;
}
};
替换数字
# include<iostream>
# include <string>
using namespace std;
int main()
{
string s;
int count = 0;
cin >> s;
int oldindex = s.size() - 1;
for (int i = 0; i < s.size(); i++)
{
if (s[i] >= '0' && s[i] <= '9')count++;
}
s.resize(s.size() + count * 5);
int newindex = s.size() - 1;
while (oldindex >= 0)
{
if (s[oldindex] >= '0' && s[oldindex] <= '9')
{
s[newindex--] = 'r';
s[newindex--] = 'e';
s[newindex--] = 'b';
s[newindex--] = 'm';
s[newindex--] = 'u';
s[newindex--] = 'n';
}
else s[newindex--] = s[oldindex];
oldindex--;
}
cout << s;
return 0;
}
# include<iostream>
# include <string>
using namespace std;
int main()
{
string s;
cin >> s;
for (int i = 0; i < s.size(); i++)
{
if (s[i] >= '0' && s[i] <= '9')
{
cout << "number";
}
else cout << s[i];
}
return 0;
}
这里是KIMI给的
翻转字符串里的单词
添加链接描述
我写的时候处理不好多个空格的问题,没写出来,这里是快慢指针去空格加上全部反转与局部反转,需要好好消化一下
class Solution {
public:
void reverse(string &s,int start,int end)
{
for(int i=start,j=end;i<j;i++,j--)
swap(s[i],s[j]);
}
void removeEnterSpace(string & s)
{
int slow=0;
for(int fast=0;fast<s.size();fast++)
{
if(s[fast]!=' ')
{
if(slow!=0)s[slow++]=' ';
while(fast<s.size()&&s[fast]!=' ')
{
s[slow++]=s[fast++];
}
}
}
s.resize(slow);
}
string reverseWords(string s) {
removeEnterSpace(s);
reverse(s,0,s.size()-1);
int start=0;
for(int i=0;i<=s.size();i++)
{
if(s[i]==' '||i==s.size())
{
reverse(s,start,i-1);
start=i+1;
}
}
return s;
}
};
右旋字符串
添加链接描述
思路与上一代道题相似,全部反转加上局部反转,当然还有花费更多的空间的解法,这个是在原数组操作,没有多余的空间开销
代码:
# include <iostream>
# include <string>
# include <algorithm>
using namespace std;
int main()
{
int k;
string str;
cin >> k >> str;
reverse(str.begin(), str.end());
reverse(str.begin(), str.begin() + k);
reverse(str.begin() + k, str.end());
cout << str;
return 0;
}