一、344. 反转字符串
题目链接:344
题解:
class Solution {
public:
void reverseString(vector<char>& s) {
char tmp;
for(int i = 0; i < s.size()/2; i++){
tmp = s[i];
s[i] = s[s.size()-i-1];
s[s.size()-i-1] = tmp;
}
}
};
二、541. 反转字符串 II
题目链接:541
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);
}else{// 3. 剩余字符少于 k 个,则将剩余字符全部反转。
reverse(s.begin() + i, s.end());
}
}
return s;
}
};
三、剑指 Offer 05. 替换空格
题目链接:替换空格
class Solution {
public:
string replaceSpace(string s) {
//第一步,计算空格数量,再扩容
int count = 0;
int oldSize = s.size();
for( int i = 0; i < s.size(); i++){
if(s[i] == ' '){
count++;
}
}
s.resize(s.size() + count*2);
int newSize = s.size();
for( int i = newSize-1, j = oldSize-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;
}
};
四、剑指 Offer 58 - II. 左旋转字符串
题目链接:剑指offer58
class Solution {
public:
string reverseLeftWords(string s, int n) {
//第一种解法,直接开辟新空间
/*
string res;
for( int i = n; i < s.size(); i++){
res.push_back(s[i]);
}
for(int j = 0; j < n; j++){
res.push_back(s[j]);
}
return res;
*/
//第二种解法,直接原地反转
reverse(s.begin(), s.begin()+n);
reverse(s.begin()+n, s.end());
reverse(s.begin(), s.end());
return s;
}
};