344翻转字符串
class Solution {
public:
void reverseString(vector<char>& s)
{
for(int i=0,j=s.size()-1;i<j;i++,j--)
{
auto temp=s[i];
s[i]=s[j];
s[j]=temp;
}
}
};
541翻转字符串2
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.begin()+s.size());
}
}
return s;
}
};
剑指offer05
class Solution {
public:
string replaceSpace(string s)
{
string res;
for(int i=0;i<s.size();i++)
{
if(s[i]==' ') res+="%20";
else res+=s[i];
}
return res;
}
};
这种方法固然简单,但是申请了一个空间
下面这种方法更简单
class Solution {
public:
string replaceSpace(string s)
{
int count=0;
int olds=s.size();
for(int i=0;i<s.size();i++)
{
if(s[i]==' ')count++;
}
s.resize(s.size()+2*count);
int news=s.size();
for(int i=olds-1,j=news-1;i<j;i--,j--)
{
if(s[i]!=' ')
{
s[j]=s[i];
}
else
{
s[j]='0';
s[j-1]='2';
s[j-2]='%';
j-=2;
}
}
return s;
}
};
151翻转字符串中的单词
class Solution {
public:
string reverseWords(string s)
{
reverse(s.begin(), s.end());
int n=s.size();
int idx=0;
for(int start=0;start<n;start++)
{
if(s[start]!=' ')
{
if(idx!=0) s[idx++]=' ';
int end=start;
while(end<n&&s[end]!=' ')
{
s[idx++]=s[end++];
}
reverse(s.begin()+idx-(end-start),s.begin()+idx);
start=end;
}
}
s.erase(s.begin()+idx,s.end());
return s;
}
};
剑指offer左旋转字符串
class Solution {
public:
string reverseLeftWords(string s, int n)
{
return s.substr(n,s.size()-n)+s.substr(0,n);
}
};