算法训练day7| 344.反转字符串 541. 反转字符串II 54.替换数字 151.翻转字符串里的单词 55.右旋转字符串

  • 反转字符串
class Solution {
public:
    void reverseString(vector<char>& s) {
        for(int i = 0, j = s.size() - 1;i < (s.size() - 1)/2;i++,j--){
            swap(s[i],s[j]);
        };  //注意这一题没有返回值
    }
};
  • 反转字符串II
    class Solution {
    public:
        string reverseStr(string s, int k) {
            for(int i = 0; i < s.size() - 1 ; i += (2*k)){ //for也是可以呈块状变化的,而不是单数增加,通过for的第三个条件
                if(i + k <= s.size()){
                reverse(s.begin() + i , s.begin() + i + k);   //主要是你能不能想到这个reverse的条件
                }
                else{
                    reverse(s.begin() + i,s.end());
                }
            }
            return s;   //注意该题是有返回值的
        }
    };
  • 替换数字 
    #include <iostream>
    using namespace std;
    int main(){
        string s;
        while(cin >> s){   //这道题的核心就是用什么机制去检测数字?
            int ssize1 = s.size();
            int count = 0;
            for(int i = 0; i < ssize1 ;i++){
                if(s[i] >= '0' && s[i] <= '9')    //通过这种方式判断是否为数字,还是很巧妙的   //注意这里的数字要加引号,这代表着字符串中的数字
                {
                    count++;
                }
            }
            int ssize2 = ssize1 + count * 5;    //注意字符串的扩容是通过resize
            s.resize(ssize2);
            for(int i = ssize1 , j = ssize2 ; i < j ; i-- , j--){   //注意替换的动作,应当是从后往前,否则每替换一次,后面剩下的就要同步往后扩容
                if(s[i] >= '0' && s[i] <= '9'){
                    s[j] = 'r';
                    s[j - 1] = 'e';
                    s[j - 2] = 'b';
                    s[j - 3] = 'm';
                    s[j - 4] = 'u';
                    s[j - 5] = 'n';
                    j = j - 5;
                }
                else{
                    s[j] = s[i];   //别忘了处理非数字的类型
                }
            }
            cout << s << endl;
        }
    }
        

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值