344.反转字符串
双指针法
class Solution {
public:
void reverseString(vector<char>& s) {
int size = s.size();
int l=0, r=size-1;
while(l<r){
char temp = s[l];
s[l] = s[r];
s[r] = temp;
l++;
r--;
}
}
};
541. 反转字符串II
class Solution {
public:
void reverseString(string& s, int l, int r) {
int size = s.size();
while(l<r){
char temp = s[l];
s[l] = s[r];
s[r] = temp;
l++;
r--;
}
}
string reverseStr(string s, int k) {
int size = s.size();
for(int i=0; i<size; i+=(2*k)){
if(i+k <= s.size()){
reverseString(s, i, i+k-1);
continue;
}
reverseString(s, i, size-1);
}
return s;
}
};
剑指Offer 05.替换空格
class Solution {
public:
string replaceSpace(string s) {
int size = s.size();
int count=0;
for(int i=0; i<size; i++){
if(s[i]==' '){
count++;
}
}
s.resize(size+2*count);
for(int i=size-1,j=s.size()-1; i<j; i--,j--){
if(s[i]==' '){
s[j]='0';
s[j-1]='2';
s[j-2]='%';
j=j-2;
}
else{
s[j]=s[i];
}
}
return s;
}
};
2.库函数
class Solution {
public:
string replaceSpace(string s) {
int size = s.size();
for(int i=0;i<size;i++){
if(s[i]==' '){
s.insert(i,"%20"); //插入在i字符前
s.erase(i+3,1);
size+=2;
}
}
return s;
}
};
151.翻转字符串里的单词
去空格需要注意开头空格的情况,用双指针法去多余空格
class Solution {
public:
void removeExtraSpaces(string& s) {
//去空格
int l = 0;
int size = s.size();
for(int i=0;i<size;i++){
if(s[i]!=' '){
// 不是第一个单词需要加一个空格
if(l!=0)s[l++]=' ';
//把一个单词填上
while(i<size&&s[i]!=' '){
s[l++]=s[i++];
}
}
}
s.resize(l);
}
void reverseStr(string& s,int begin,int end){
while(begin<end){
char tmp = s[begin];
s[begin] = s[end];
s[end] = tmp;
begin++;
end--;
}
}
string reverseWords(string s) {
removeExtraSpaces(s);
int size = s.size();
reverseStr(s,0,size-1);
int l=0;
for(int i=0;i<=size;i++){
if(s[i]==' '||(i==size)){
reverseStr(s,l,i-1);
l = i+1;
}
}
return s;
}
};
剑指Offer58-II.左旋转字符串
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;
}
};
2.取模,用了额外空间
class Solution {
public:
string reverseLeftWords(string s, int n) {
string ans = s;
int size = s.size();
for(int i=0;i<size;i++){
ans[i] = s[(i+n)%size]; //取模循环
}
return ans;
}
};