简单题,双指针解决
class Solution {
public:
void reverseString(vector<char>& s) {
int i=0;
int j=s.size()-1;
while(i<j)
{
swap(s[i],s[j]);
i++;
j--;
}
}
};
翻转一下子没想过来,看了题解直呼精妙
class Solution {
public:
string reverseStr(string s, int k) {
for(int i=0;i<s.size();i+=2*k)
{
if(i+k<=s.size())
reverse(s.begin()+i, s.begin()+i+k);
else
reverse(s.begin()+i,s.end());
}
return s;
}
};
剑指 Offer 05. 替换空格 - 力扣(Leetcode)
之前刷过,先拓展size,后使用双指针从后向前一个个替换
class Solution {
public:
string replaceSpace(string s) {
int count=0;
for(int i=0;i<s.size();i++)
{
if(s[i]==' ')
count++;
}
int presize=s.size();
int cursize=(s.size()+count*2);
s.resize(cursize);
int i=cursize-1;
int j=presize-1;
while(j>=0)
{
if(s[j]!=' ')
{
s[i]=s[j];
i--;
j--;
}
else
{
s[i]='0';
s[i-1]='2';
s[i-2]='%';
i-=3;
j--;
}
}
return s;
}
};
按照题解写的,去除空格有点巧妙,需要再理解
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 removespace(string& s)
{
int j=0;
for(int i=0;i<s.size();i++)
{
if(s[i]!=' ')
{
if(j!=0)
{
s[j]=' ';
j++;
}
while(i<s.size()&&s[i]!=' ')
{
s[j]=s[i];
i++;
j++;
}
}
}
s.resize(j);
}
string reverseWords(string s) {
removespace(s);
reverse(s, 0, s.size()-1);
int start=0;
for(int i=0;i<=s.size();i++)
{
if(i==s.size()||s[i]==' ')
{
reverse(s, start, i-1);
start=i+1;
}
}
return s;
}
};
剑指 Offer 58 - II. 左旋转字符串 - 力扣(Leetcode)
class Solution {
public:
string reverseLeftWords(string s, int n) {
reverse(s.begin(), s.begin()+n);
reverse(s.begin()+n, s.end());
reverse(s.begin(), s.end());
return s;
}
};