class Solution {
public:
void reverseString(vector<char>& s) {
if (s.size() < 2) {
return;
}
//双指针:分别从头,尾出发两两交换
for (int i = 0, j = s.size() - 1; i < j; i++, j--) {
swap(s[i], s[j]);
}
}
void swap(auto& a, auto& b) {
auto temp = a;
a = b;
b = temp;
}
};
class Solution {
public:
string reverseStr(string s, int k) {
int size = s.size();
for (int i = 0; i < s.size(); i += 2*k) {
// if (size - i - 1 >= k) {
// //剩余字符够K个
// reverse(s, i, i + k - 1);
// }else {
// reverse(s, i, size - 1);
// }
//优化方案
reverse(s, i, min(i + k - 1, size - 1));
}
return s;
}
void reverse(string& s, int left, int right) {
while (left < right) {
swap(s[left++], s[right--]);
}
}
void swap(auto& left, auto& right) {
auto temp = left;
left = right;
right = temp;
}
};
class Solution {
public:
string reverseWords(string s) {
vector<string> help;
int start = 0, end = s.size() - 1;
while (s[start] == ' ' && start < end) {
start++;
}
while (s[end] == ' ' && start < end) {
end--;
}
int i = end;
int j = end;
string str;
while (i >= start) {
while (i >= start && s[i] != ' ') {
i--;
}
str = s.substr(i + 1, j - i);
help.push_back(str);
while (i >= start && s[i] == ' ') {
i--;
}
j = i;
}
str = "";
for (vector<string>::iterator it = help.begin(); it != help.end(); it++) {
if (it != help.end() - 1) {
str += *it + " ";
}
else {
str += *it;
}
}
return str;
}
};
剑指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;
}
};