剑指Offer 翻转单词顺序列

 两次翻转,先翻转整个字符串,然后对其中的单词进行翻转。

这里要注意,reverse(s + a, s + b), s为数组名, a, b为长度,这里翻转的范围是s[a] – s[b-1],类似于sort()函数,可以把这个理解为一个左闭右开的区间,所以后面可以用str.end(),因为这个是指向数组最后字符的后一位。

class Solution {
public:
    string ReverseSentence(string str) {
        reverse(str.begin(), str.end());
        int start = 0;
        for(int i = 0; i < str.size(); i++){
            if(str[i] == ' '){  //碰到空格
                reverse(str.begin() + start, str.begin() + i); //翻转单词,注意str.begin() + i是空格位
                start = i + 1;  //start移到空格后一位
            }
            if(i == str.size()-1)
                reverse(str.begin()+start, str.end());
        }
        return str;
    }
};

s

点赞