Day8 代码随想录算法训练营第八天 344.反转字符串 541. 反转字符串II 剑指Offer 05.替换空格 151.翻转字符串里的单词 剑指Offer58-II.左旋转字符串

文章展示了多个C++实现的字符串处理问题,包括反转字符串、反转字符串中的单词、替换空格、左旋转字符串等,这些都是基于字符串操作的算法题目。

344.反转字符串 Reverse String

  • 基础的字符串题目

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

541. 反转字符串II Reverse String II

  • 例子:

  • abcdefgz 如果k=3 那么我们需要进行2k的字符中前k个字符进行翻转成cbadefgz

  • 如果最后剩下不到k个 那就全部进行反转 : cbadefzg

  • 如果是abcdefgzjj 那么就反转前k个 : cbadefjzgj

class Solution {  
public:  
    string reverseStr(string s, int k) {  
        for (int i = 0; i < s.size(); i += (2 * k)){  
            if (i + k <= s.size()){  
                reverse(s.begin()+i , s.begin() + i + k);  
                continue;            
            }  
            reverse(s.begin() + i, s.end());  
        }  
        return s;  
    }  
};

剑指Offer 05.替换空格

class Solution {  
public:  
    string replaceSpace(string s) {  
        string res;  
        for (int i = 0; i < s.size(); i++){  
            if (s[i] == ' '){  
                res += "%20";  
            } else {  
                res += s[i];  
            }  
        }  
        return res;  
    }  
};

151.翻转字符串里的单词 Reverse Words in a String

没看老师的解题 自己写的方法

class Solution {  
public:  
    string reverseWords(string s) {  
        int len = s.size();  
        int count = 0;  
        string res;  
        for (int i = len -1 ; i >= 0 ; i--){  
            if (s[i] != ' '){  
                count++;  
            } else {  
                res.append(s,i+1,count);  
                if (count > 0){  
                    res+=" ";  
                }  
                count = 0;  
            }  
        }  
        //如果s一开始不是空格
        if (s[0] != ' '){  
            res.append(s,0,count);  
        }  
        //如果最后多出空格,取消一个
        int lensize = res.size();  
        if (res[lensize - 1] == ' '){  
            res.erase(res.size() - 1);  
        }  
        return res;  
    }  
};

剑指Offer58-II.左旋转字符串

  • 用额外空间

class Solution {  
public:  
    string reverseLeftWords(string s, int n) {  
        string res;  
        int len = s.size();  
        res.append(s,n,len-n);  
        res.append(s,0,n);  
        return res;  
    }  
};
  • 翻转字符串:

class Solution {  
public:  
    string reverseLeftWords(string s, int n) {  
        reverse(s.begin(), s.begin() + n);  
        reverse(s.begin() + n, s.end());  
        reverse(s.begin(), s.end());  
        return s;  
    }  
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Stark_Ye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值