344.反转字符串
要求:原地修改,O(1)的空间复杂度
直接swap头尾
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]);
}
}
};
关于swap函数:
void swap(int a, int b){
int tmp = a;
a= b;
b=tmp;
}
541.反转字符串Ⅱ
重点 :for循环的遍历条件的语句
reverse函数实现
class Solution {
public:
void reverse(string & s, int start ,int end){
for(int i = start,j = end; i< j; i++,j--){
swap(s[i],s[j]);
}
}
string reverseStr(string s, int k) {
for(int i = 0; i< s.size(); i += (2*k)){
if(i + k <= s.size()){
reverse(s,i,i+k-1);
continue;
}
reverse(s,i,s.size() - 1);
}
return s;
}
};
151.反转字符串中的单词
(原地反转)思路:移除空格;整体反转;每个单词反转
难点-移除多余空格-双指针
class Solution {
public:
void reverse(string& s, int start, int end) {
for (int i = start, j = end; i < j; i++, j--) {
swap(s[i], s[j]);
}
}
void removeExtraSpace(string& s) {
int slow = 0;
for (int fast = 0; fast < s.size(); fast++) {
if (s[fast] != ' ') {
if (slow != 0)
s[slow++] = ' '; // mark
while (fast < s.size() && s[fast] != ' ') {
s[slow] = s[fast];
slow++;
fast++;
}
}
}
s.resize(slow);
}
string reverseWords(string s) {
removeExtraSpace(s);
reverse(s, 0, s.size() - 1);
int start = 0;
for (int i = 0; i <= s.size(); i++) {
if (i == s.size() || s[i] == ' ') {
reverse(s, start, i - 1);
start = i + 1;
}
}
return s;
}
};