344.反转字符串
比较容易,学习了两组交换数字方法,临时变量和位运算
class Solution {
public:
void reverseString(vector<char>& s) {
int i=0,j=s.size()-1;
while(i<j){
swap(s[i],s[j]);
i++;
j--;
}
}
};
541. 反转字符串II
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()+i+k);
continue;
}
reverse(s.begin()+i,s.end());
}
return s;
}
};
剑指Offer 05.替换空格
时间比较赶,直接看代码
class Solution {
public:
string replaceSpace(string s) {
int count = 0; // 统计空格的个数
int sOldSize = s.size();
for (int i = 0; i < s.size(); i++) {
if (s[i] == ' ') {
count++;
}
}
// 扩充字符串s的大小,也就是每个空格替换成"%20"之后的大小
s.resize(s.size() + count * 2);
int sNewSize = s.size();
// 从后先前将空格替换为"%20"
for (int i = sNewSize - 1, j = sOldSize - 1; j < i; i--, j--) {
if (s[j] != ' ') {
s[i] = s[j];
} else {
s[i] = '0';
s[i - 1] = '2';
s[i - 2] = '%';
i -= 2;
}
}
return s;
}
};
151.翻转字符串里的单词
先简单看了一下思路,代码后补
剑指Offer58-II.左旋转字符串
1)额外空间
class Solution {
public:
string reverseLeftWords(string s, int n) {
string res = "";
for(int i = n; i < s.size(); i++){
res += s[i];
}
for(int i = 0; i < n; i++){
res += s[i];
}
return res;
}
};
2)反转多次
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;
}
};