方法:双指针
class Solution {
public:
void reverseString(vector<char>& s) {
int l = 0, r = s.size() - 1;
while(l < r) {
char c = s[l];
s[l] = s[r];
s[r] = c;
++l;
--r;
}
}
};
$时间复杂度O(N),空间复杂度O(1);
方法:模拟
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()+k+i);
else reverse(s.begin()+i, s.end());
}
return s;
}
};
$时间复杂度O(N),空间复杂度O(1);
方法:模拟
class Solution {
private:
void removeExtraspace(string& s) {
int slow = 0;
for(int i = 0; i < s.size(); ++i) {
if(s[i] != ' ') {
if(slow != 0) s[slow++] = ' ';
while(s[i] != ' ' && i < s.size()) s[slow++] = s[i++];
}
}
s.resize(slow);
}
public:
string reverseWords(string s) {
removeExtraspace(s);
reverse(s.begin(), s.end());
for(int st = 0, i = 0; i <= s.size(); ++i) {
if(s[i] == ' ' || i == s.size()) {
reverse(s.begin()+st, s.begin()+i);
st = i+1;
}
}
return s;
}
};
$时间复杂度O(N),空间复杂度O(1);
方法:双指针
class Solution {
public:
string replaceSpace(string s) {
int old = s.size(), cnt = 0;
for(int i = 0; i < s.size(); ++i) if(s[i] == ' ') cnt += 2;
s.resize(s.size() + cnt);
int now = s.size();
for(int l = old-1, r = now-1; l < r; --l, --r) {
if(s[l] != ' ') s[r] = s[l];
else {
s[r] = '0';
s[r-1] = '2';
s[r-2] = '%';
r -= 2;
}
}
return s;
}
};
$时间复杂度O(N),空间复杂度O(1);
方法:模拟
class Solution {
public:
string reverseLeftWords(string s, int k) {
reverse(s.begin(), s.begin()+k);
reverse(s.begin()+k, s.end());
reverse(s.begin(), s.end());
return s;
}
};
$时间复杂度O(N),空间复杂度O(1);