day08 力扣344反转字符串_541反转字符串Ⅱ_151反转字符串中的单词_54数字替换

344 反转字符串

class Solution {
public:
    void reverseString(vector<char>& s) {
        int slow = 0;
        int fast = s.size()-1;
        while(slow < fast){
            //char c = s[slow];
            //s[slow] = s[fast];
            //s[fast] = c;
            swap(s[slow],s[fast]);
            slow++;
            fast--; 
        }
    }
};

541 反转字符串Ⅱ

class Solution {
public:
    void reverse(string& s,int start, int end){
        while(start < end){
            swap(s[start],s[end]);
            start++;
            end--;
        }
    }

    string reverseStr(string s, int k) {
        for(int i =0; i < s.size(); i=i+2*k){
            if((i+2*k) < s.size()){
                //反转前K个
                reverse(s, i, i+k-1);
            }
            else if(i+k<s.size()){
                //反转前K个
                reverse(s, i, i+k-1);
            }
            else{
                //全部反转
                reverse(s, i, s.size()-1);
            }
        }
        return s;
    }
};

151 反转字符串里的单词

  • 去除字符串多余的空格:双指针(难点)
  • 逆转字符串:字符串reverse(s.begin(), s.end())
  • 逆转字符串中的单词:双指针找每个单词的start,end。empty的作用,最后一个单词的逆转。
class Solution {
public:
    //除去多余空格
    void removeExtraspace(string& s){
    	//快指针fast指向字符串插入数组的数据,慢指针slow指向要插入数据在数组的位置
        int fast = 0, slow = 0;
        //fast找最初应该插入的数据即非' '字符
        while(fast < s.size() && s[fast] == ' ') fast++;
        for(; fast < s.size(); fast++){
        	//有大于一个的空格,跳过,只保留一个空格
            if(fast - 1 >= 0 && s[fast] == ' ' && s[fast - 1] == ' ') continue;
            s[slow++] = s[fast];
        }
        //字符串最后一个字符有可能是' ',resize()作用是在逆转字符串中逆转单词结束条件是s进行resize后的大小
        if((slow - 1) >= 0 && s[slow - 1] == ' ') s.resize(slow-1);
        else s.resize(slow);
    }
    string reverseWords(string s) {
        //除去多余空格
        removeExtraspace(s);
        //逆转字符串
        reverse(s.begin(), s.end());
        //逆转字符串中的单词
        int start = 0, end = 0;
        bool empty = false;
        for(int i = 0; i < s.size(); i++){
            if(s[i] != ' ' && (!empty)){
                start = i;
                empty = true;
            }
            if(s[i] == ' ' && empty){
                end = i;
                reverse(s.begin() + start, s.begin()+end);
                empty = false;
            }
        }
        //最后一个单词逆转
        reverse(s.begin() + start, s.end());
        return s;
    }
};

54 数字替换

#include<iostream>
using namespace std;

int main(){
    string s;
    while(cin >> s){
        int oldSize = s.size();
        int count = 0;
        for(int i = 0; i < s.size(); i++){
            if(s[i] >= '0'&& s[i] <= '9') count++;
        }
        //先改变字符串空间的大小,再填充number
        s.resize(oldSize + count*5);
        int newSize=s.size();
        //由**之前的数组**从后到前遍历
        for(int i = oldSize - 1; i >= 0; i--){
            if(s[i] < '0' || s[i] > '9') {
                s[--newSize] = s[i];
            }
            else{
                //说明是数字
                s[--newSize] = 'r';
                s[--newSize] = 'e';
                s[--newSize] = 'b';
                s[--newSize] = 'm';
                s[--newSize] = 'u';
                s[--newSize] = 'n';
            }
        }
        cout << s << endl;
    }
}
  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值