题目链接:344.反转字符串
class Solution {
public:
void reverseString(vector<char>& s) {
for(int i = 0, j = s.size() - 1; i < j; i++, j--) {
swap(s[i], s[j]);
}
}
};
题目链接:541. 反转字符串II
class Solution {
public:
string reverseStr(string s, int k) {
int left = 0, right = k - 1, right_ = 2 * k - 1;
while(right_ < s.length()) {
while(left < right) {
swap(s[left], s[right]);
left++;
right--;
}
left = right_ + 1;
right = left + k - 1;
right_ += 2 * k;
}
if(s.length() - left + 1 <= k){
right = s.length() - 1;
while(left < right) {
swap(s[left], s[right]);
left++;
right--;
}
}
else {
right = left + k - 1;
while(left < right) {
swap(s[left], s[right]);
left++;
right--;
}
}
return s;
}
};
题目链接:剑指Offer 05.替换空格
先扩充字符串长度,然后从字符串末尾利用快慢指针重新填写字符串。
class Solution {
public:
string replaceSpace(string s) {
size_t i, j;
int num = 0;
for(i = 0; i < s.length(); i++) {
if(s[i] == ' ') num++;
}
i--;
while(num > 0) {
s += " ";
num--;
}
j = s.length() - 1;
while(i != j) {
if(s[i] != ' ') {
s[j] = s[i];
i--;
j--;
}
else {
s[j] = '0';
s[j - 1] = '2';
s[j - 2] = '%';
i--;
j -= 3;
}
}
return s;
}
};
题目链接:151.翻转字符串里的单词
整体反转+多余空格删除 +局部反转
class Solution {
public:
string reverseWords(string s) {
reverse(s.begin(), s.end());
size_t slow = 0, fast = 0;
while(s[fast] == ' ') fast++;
while(fast < s.length()) {
if(s[fast] == ' '){
s[slow] = ' ';
slow++;
while(s[fast] == ' ') fast++;
}
else {
s[slow] = s[fast];
slow++;
fast++;
}
}
s.erase(slow, fast - slow);
if(s[slow - 1] == ' ') s.pop_back();
slow = 0;
fast = 0;
while(fast != s.length() + 1) {
while(fast != s.length() && s[fast] != ' ') fast++;
reverse(s.begin() + slow, s.begin() + fast);
fast++;
slow = fast;
}
return s;
}
};
题目链接:Offer58-II.左旋转字符串
整体反转+局部反转
class Solution {
public:
string reverseLeftWords(string s, int n) {
reverse(s.begin(), s.end());
reverse(s.begin(), s.end() - n);
reverse(s.end() - n, s.end());
return s;
}
};