算法日志5:字符串也是数组

前言

字符串相关题目记录


反转字符串1

class Solution {
public:
    void reverseString(vector<char>& s) {
        int l,r;
        l = 0;
        r = s.size()-1;
        while(r>l){
            s[l] ^= s[r];
            s[r]^=s[l];
            s[l]^=s[r];
            l++;
            r--;
        }
    }
};

反转字符串2

class Solution {
public:
    void myreverse(string&s, int l, int r){
        while(r>l){
            swap(s[l], s[r]);
            r--;
            l++;
        }
    }
    string reverseStr(string s, int k) {
        int l,r;
        int len = s.size();
        for(int i =0 ;i<len;i+=2*k){
            if(i+k-1<len){
                l = i;
                r = i+k-1;
                myreverse(s,l, r);
            }
            else{
                l = i;
                r = len-1;
                myreverse(s,l,r);
            }
        }
        return s;
    }
};

替换数字

#include<iostream>
#include<string>
using namespace std;
int main(){
    string s = "";
    cin>> s;
    int cnt = 0;
    int l = s.size() - 1;
    for(int i = 0; i<s.size();i++){
        if(s[i]-'0'>=0 &&s[i]-'0'<=9){
            cnt++;
        }
    }
    for(int i =0; i<cnt;i++){
        s+="     ";
    }
    int r = s.size() - 1;
    while(l>=0){
        if(s[l]>='a' && s[r]<='z'){
            
            s[r--] = s[l];
            l--;
        }
        else{
            s[r--] = 'r';
            s[r--] = 'e';
            s[r--] = 'b';
            s[r--] = 'm';
            s[r--] = 'u';
            s[r--] = 'n';
            l--;
        }
    }
    cout<<s;

}

翻转字符串里的单词

class Solution {
public:
    void myreverse(string&s, int l, int r){
        while(r>l){
            swap(s[l], s[r]);
            l++;
            r--;
        }
    }
    string reverseWords(string s) {
        // 去除多余空格
        int fast = 0,slow = 0;
        while(s[fast]==' '){
            fast++;
        }
        while(fast<s.size()){
            if(s[fast]!=' '){
                s[slow] = s[fast];
                slow++;
                fast++;
            }
            else if(fast>0 && fast<s.size() -1&& s[fast] == ' '&& s[fast+1]!=' '){
                s[slow] = s[fast];
                slow++;
                fast++;
            }
            else{
                fast++;
            }
           
        }
        s.resize(slow);
        // cout<<s;
        //提取完毕
        myreverse(s, 0, s.size()-1);
        int l = 0,r = 0;
        while(r<s.size()){
            if(r == s.size()-1) myreverse(s,l,r);
            if(s[r]!=' ') r++;
            else{
                myreverse(s,l,r-1);
                l = r+1;
                r = r+1;
            }
        }
        return s;
    }
};

右旋字符串

#include<iostream>
#include<string>
using namespace std;
void myreverse(string &s, int l, int r){
    while(r>l){
        swap(s[l], s[r]);
        l++;
        r--;
    }
}
int main(){
    int k;
    cin>>k;
    string s;
    cin>>s;
    myreverse(s,0,s.size()-1);
    int l =0, r = k-1;
    myreverse(s, l, r);
    myreverse(s, r+1, s.size() - 1);
    cout<<s;
}
posted @ 2025-03-26 17:44  玉米面手雷王  阅读(11)  评论(0)    收藏  举报