DAY8 - 344.反转字符串, 541. 反转字符串II, 卡码网54.替换数字

什么时候用库函数什么时候不用?

如果题目关键的部分直接用库函数就可以解决,建议不要使用库函数。

如果库函数仅仅是 解题过程中的一小部分,并且你已经很清楚这个库函数的内部实现原理的话,可以考虑使用库函数。

344.反转字符串

easy

class Solution {
public:
    void reverseString(vector<char>& s) {
        for (int i = 0, j = s.size() - 1; i < j; i++, j--) {
            swap(s[i],s[j]);
        }
    }
};

注意下for里多个元素的写法,用逗号隔开,不同部分用分号隔开

541. 反转字符串II

一开始写了一个有点错误的版本

class Solution {
public:
    string reverseStr(string s, int k) {
        int end;
        for(int i=0;i<s.size();i+=2*k){
            for(int p=i,q=i+k-1;p<q;p++,q--){
                swap(s[p],s[q]);
            }
            end=i;
        }
        int rest=s.size()%(2*k);
        if(rest==0){}
        else if(rest<=k){
            for(int p=end+1,q=s.size()-1;p<q;p++,q--){
                swap(s[p],s[q]);
            }
        }else{
            for(int p=end+1,q=end+k;p<q;p++,q--){
                swap(s[p],s[q]);
            }
        }
        return s;
    }
};

底下这一坨判断和重复代码就很不美观,而且还是错的,问了gpt帮我修改了一下

class Solution {
public:
    string reverseStr(string s, int k) {
        for (int i = 0; i < s.size(); i += 2 * k) {
            int left = i;
            int right = min(i + k - 1, (int)s.size() - 1);
            while (left < right) {
                swap(s[left], s[right]);
                left++;
                right--;
            }
        }
        return s;
    }
};

因为最后k<剩余字符串数量<2k时和一般情况是一样的,都是要反转k个字符串。特殊就是剩余字符串数量不到k的情况。加入一个取更小值就行了 int right = min(i + k - 1, (int)s.size() - 1);

卡码网54.替换数字

这个题创建一个结果string然后处理没啥难度,尝试在原字符串上进行操作并且不适用replace。

s.replace(i, i+1, “number”);
开始index,结束index,要换的字符串

tips:从前往后处理需要移动后面一坨剩余的,这时候从后往前就方便多了

#include<iostream>
#include<string>
using namespace std;

int main(){
    string s;
    cin>>s;
    int ncnt=0;
    for(char c:s){
        if(c>='0'&&c<='9') ncnt++;
    }
    int end=s.size()-1;
    s.resize(s.size()+ncnt*5);
    int posi=s.size()-1;
    while(end>=0){
        if(s[end]>='0'&&s[end]<='9'){
            s[posi--] = 'r';
            s[posi--] = 'e';
            s[posi--] = 'b';
            s[posi--] = 'm';
            s[posi--] = 'u';
            s[posi--] = 'n';
        }else{
            s[posi--]=s[end];
        }
        end--;
    }
    cout<<s;
    
    return 0;
}
posted @ 2025-03-20 00:09  ChloeChen0221  阅读(41)  评论(0)    收藏  举报