LeetCode:Reverse Words in a String

class Solution {
public:
    void reverseWords(string &s) {
        int a, b;
        int len = s.length();

        //注意判断s是否一开始就为空、或者s全为空格
        if(!len){
            return ;
        }
        //spaces1
        a = 0;
        while(s[a] == ' ' && a < len){
            a++;
        }
        s.assign(s, a, len);
        if(a >= len){
            return ;
        }
        //reverse1
        len = len - a;
        a = 0;
        b = len - 1;
        while(a < b){ 
            s[a] ^= s[b] ^= s[a] ^= s[b];
            a++;
            b--;
        }   
        //spaces2
        a = 0;
        while(s[a] == ' '){
            a++;
        }   
        s.assign(s, a, len);
        s.append(" ");
    
        //spaces3_reverse2_mid
        int id = 0;
        string temp = s;
        a = b = -1; 
        len = s.length();
        for(int i = 0; i < len; i++){
            if(s[i] != ' ' && a == -1){
                a = i;
            }   
            if(a != -1 && s[i+1] == ' ' && s[i] != ' '){
                for(int j = i; j >= a; j--, id++){
                    temp[id] = s[j];
                }   
                temp[id++] = ' ';
                a = -1;
            }
        }
        s.assign(temp, 0, id-1);
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值