344.反转字符串
思路:easy,最简单的直接调用函数解决,自己实现反转也很简单,设置头尾指针依次反战就行
class Solution {
public:
void reverseString(vector<char>& s) {
int l = 0;
int r = s.size()-1;
while(l<r){
char tmp = s[l];
s[l] = s[r];
s[r] = tmp;
l++;
r--;
}
}
};
参考文章:代码随想录-344.反转字符串
541. 反转字符串II
题目链接:541. 反转字符串II-力扣(LeetCode)
思路:easy, 同样的思路, 找到反转的头尾,依次反转即可
class Solution {
public:
string reverseStr(string s, int k) {
int l = 0;
int r = k-1;
while(l<s.size()){
if(r > s.size()-1){
r = s.size()-1;
}
int left = l;
int right = r;
while(left<right){
swap(s[left], s[right]);
left++;
right--;
}
l += (2*k);
r += (2*k);
}
return s;
}
};
参考文章:代码随想录-541. 反转字符串II
54.替换数字
题目链接:54.替换数字-卡码网
思路:easy,转换为数组替换或者开一个新的字符串替换都可
#include <iostream>
#include <string>
using namespace std;
int main(){
string s;
cin>>s;
string out = "";
for(int i = 0; i< s.size(); i++){
if(s[i]>='0' && s[i]<='9'){
out += "number";
}
else{
out += s[i];
}
}
cout<<out;
}
参考文章:代码随想录-54.替换数字
151.翻转字符串里的单词
题目链接:151.翻转字符串里的单词-力扣(LeetCode)
思路:前面题目的综合,流程复杂一些,重点依然是找好头尾指针
class Solution {
public:
string reverseWords(string s) {
reverse(s.begin(), s.end());
int n = s.size();
int idx = 0;
for(int l = 0; l<n; l++){
if(s[l] != ' '){
if(idx != 0){
s[idx++] = ' ';
}
int r = l;
while(r<n && s[r] != ' '){
s[idx++] = s[r++];
}
reverse(s.begin()+idx-(r-l), s.begin()+idx);
l = r;
}
}
s.erase(s.begin()+idx, s.end());
return s;
}
};
参考文章:代码随想录-151.翻转字符串里的单词
55.右旋转字符串
题目链接:55.右旋转字符串-卡码网
思路:拆分成两个字符串再合并, 如果空间复杂度为O(1)则参考代码随想录方法
#include <iostream>
#include <string>
using namespace std;
int main(){
int k;
cin>>k;
string s;
cin>>s;
string out1 ="";
string out2 ="";
for(int i=0; i<s.size(); i++){
if(i<s.size()-k){
out1+=s[i];
}
else{
out2 += s[i];
}
}
string out = out2+out1;
cout<<out;
}
参考文章:代码随想录-右旋转字符串