344.反转字符串
题目链接:https://leetcode.cn/problems/reverse-string/description/
思路:使用库函数swap()解决字符反转。
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]);
}
}
};
541. 反转字符串II
题目链接:https://leetcode.cn/problems/reverse-string-ii/submissions/545834274/
思路:使用C++中的库函数reverse来进行反转。每次间隔取2k个字符,只反转前k个字符,剩余字符小于2k但大于或等于k个,则翻转前k个字符,剩余字符少于k个,则将剩余字符全部反转。按照这个逻辑写代码。
class Solution {
public:
string reverseStr(string s, int k) {
for(int i=0; i < s.size(); i += (2*k)){
//每隔2k个字符的前k个字符进行反转;剩余字符小于2k但大于或等于k个,则翻转前k个字符
if(i + k <=s.size()){
reverse(s.begin() + i,s.begin() + i + k);
}else{
//如果剩余字符少于k个,则将剩余字符全部反转。
reverse(s.begin() + i,s.end());
}
}
return s;
}
};
卡码网:54.替换数字
题目链接:https://kamacoder.com/problempage.php?pid=1064
思路:用ACM模式写代码有些不习惯,还要多熟悉。对于数组填充类问题,预先给数组扩容带填充后的大小,然后从后向前进行操作。
#include<iostream>
using namespace std;
int main(){
string s;
while (cin >> s){
int oldIndex = s.size() - 1;
int count = 0;
for(int i = 0; i < s.size(); i++){
if(s[i] >= '0'&& s[i] <= '9'){
count++;
}
}
//扩充字符串s的大小。
s.resize(s.size() + count*5);
int newIndex = s.size() - 1;
//从后往前将数字替换掉
while(oldIndex >=0){
if(s[oldIndex] >= '0' && s[oldIndex] <= '9'){
s[newIndex--] = 'r';
s[newIndex--] = 'e';
s[newIndex--] = 'b';
s[newIndex--] = 'm';
s[newIndex--] = 'u';
s[newIndex--] = 'n';
}else{
s[newIndex--] = s[oldIndex];
}
oldIndex--;
}
std::cout << s << std::endl;
}
}