【题】翻转单词顺序列

i am a student -》 student a am i

方法

  • 先翻转整个字符串
  • 再对每个单词翻转
    代码

class Solution {
public:
    void Reverse(int begin,int end,string &str)
    {
        while(begin < end)
        {
            char temp = str[begin];
            str[begin] = str[end];
            str[end] = temp;
            begin++;
            end--;
        }
    }

    string ReverseSentence(string str)
    {
        int len = str.length();
        Reverse(0,len - 1,str);

        int begin = 0;
        int end = 0;
        int i = 0;

        while(i < len)
        {
            //把前面的空格都去掉
            while(i < len && str[i] == ' ')
            {
                i++;
            }    

            begin = end = i;
            while(i < len && str[i] != ' ')
            {
                i++;
                end++;
            }
            Reverse(begin,end - 1,str);
        }
        return str;
    }
};
//----------------------------------------------------------
class Solution {
public:
    string ReverseSentence(string str) {
        string Fstr;
        int n = (int)str.size();
        if (n == 0) return Fstr;
        int i = n - 1;int ret = 0;
        int j = 0;
        while (i) {
            for (j = i; j >= 0; --j) {if (str[j] == ' ') break;}
            if (j < 0) ret = 1;
            else ret = j;
            for(j = j+1; j <= i; j++) Fstr.push_back(str[j]);
            i = ret - 1;
        }
        Fstr.push_back('\0');
        return Fstr;
    }
};
//----------------------------------------------------
class Solution {
public:
    void ReverStr(int begin, int end, string& str) {
        while (begin < end) {
            char tem = str[begin];
            str[begin] = str[end];
            str[end] = tem;

        }
    }
    string ReverseSentence(string str) {
        int n = str.length();
        ReverStr(0, n-1, str);
        int i = 0;
        int j = 0;
        while (i < n)
        {
            if (str[i] == ' ') {
                ReverStr(j, i, str);
                j = i + 1; 
            }
            i++;
        }
        return str;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值