557. 反转字符串中的单词 III(C++)

题目

给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。

示例1:

输入: "Let's take LeetCode contest"
输出: "s'teL ekat edoCteeL tsetnoc" 

注意:在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。

分析与题解

双指针思想,使用front跟back指向单词的首尾,然后反转并更新两个指针的值。

时间复杂度O(n),空间复杂度O(1)。

注意<algorithm>中函数reverse的用法:

reverse(v.begin(),v.end());

reverse函数用于反转在[first,last)范围内的顺序(包括first指向的元素,不包括last指向的元素),且reverse函数无返回值,最终代码如下:

class Solution {
public:
    string reverseWords(string s) {
        int size = s.size();
        //如果字符串为空,直接返回空字符串
        if(size==0)
            return s;
        int front=0,back=0;
        for(int i=0;i<size;i++){
            if(s[i]!=' ')
                back++;
            else{
                reverse(s.begin()+front,s.begin()+back);
                front = back+1;
                back = front;
            }
        }
        reverse(s.begin()+front,s.begin()+back);
        return s;

    }
};
posted @ 2020-08-21 16:14  脱线森林`  阅读(321)  评论(0编辑  收藏  举报