344.反转字符串
双指针思想
class Solution {
public:
void reverseString(vector<char>& s) {
for (int i = 0, j = s.size() - 1; i < s.size() / 2; i++, j--) {
// swap(s[i],s[j]);
int temp = s[i];
s[i] = s[j];
s[j] = temp;
}
}
};
541. 反转字符串II
class Solution {
public:
string reverseStr(string s, int k) {
int first = s.size() - 2 * k;
for (int i = 0, j = k - 1; i < k / 2; i++, j--) {
int temp = s[i];
s[i] = s[j];
s[j] = temp;
}
if (first < k) {
for (int i = 2 * k, j = first - 1; i < first / 2; i++, j--) {
int temp = s[i];
s[i] = s[j];
s[j] = temp;
}
} else if (first >= k && first < 2 * k) {
for (int i = 2 * k, j = 3 * k - 1; i < 2 * k + first / 2;
i++, j--) {
int temp = s[i];
s[i] = s[j];
s[j] = temp;
}
}
return s;
}
};
不具有通用性,学习代码随想录写法;
在遍历字符串的过程中,让 i += (2 * k),i 每次移动 2 * k ,然后判断是否需要有反转的区间
卡码网:54.替换数字
#include<iostream>
using namespace std;
int main(){
string s;
cin>>s;
int oldIndex=s.size()-1;
int count=0;
for(int i=0;i<s.size();i++){
if(s[i]-'0'>=0&&s[i]-'9'<=0){
count++;
}
}
// 扩充字符串s的大小
s.resize(s.size() + count * 5);
int newIndex=s.size()-1;
while(oldIndex>=0){
if(s[oldIndex]-'0'>=0&&s[oldIndex]-'9'<=0){
s[newIndex--]='r';
s[newIndex--]='e';
s[newIndex--]='b';
s[newIndex--]='m';
s[newIndex--]='u';
s[newIndex--]='n';
}
else{
s[newIndex--]=s[oldIndex];
}
oldIndex--;
}
cout<<s<<endl;
}