LeetCode 反转字符串中的单词III

题目:https://leetcode-cn.com/problems/reverse-words-in-a-string-iii/

思路:

  • 比较简单的一题,做法多样,可以用栈实现,先进后出满足输出要求,没有遇到空格就入栈,遇到空格就出栈,重复执行即可。这样做时间复杂度较大,对于要反转的操作,线性扫描是不明智的(菜鸡也常常这样想,应该养成对复杂度较大的算法及时舍弃才能进步啊啊啊),反转字符串,我们可以折半思考,一个从前面向后扫描,一个从尾部向前扫描,彼此进行交换,
class Solution {
public:
    string reverseWords(string s) {
        int size = s.size();
        if( size == 0 ) return string();
        for( int i = 0, j = 0; i < size; ++i, j = i ){
            while( i < size && s[ i ] != ' ' ) ++i;
            int tempIndex = i;
            while( j < i ) swap( s[ j++ ], s[ --i ] );
            i = tempIndex;
        }
        return s;
    }
};

//试试了标准库里的反向迭代器
class Solution { public: string reverseWords(string s) { auto prPrt = s.begin(); auto lastPtr = s.begin(); while( lastPtr <= s.end() ) { while( *lastPtr != ' ' && lastPtr != s.end() ) ++lastPtr; reverse( prPrt, lastPtr ); //【 , ) 注意区间 ++lastPtr; prPrt = lastPtr; } return s; } };

 

猜你喜欢

转载自www.cnblogs.com/sumelt/p/10473416.html