【算法】JZ73 翻转单词序列

此题先对每一个单词进行逆置,然后再整体逆置。

类似。

题解

class Solution {
          
   
public:
    void _reverse(string& str, int start, int end)
    {
          
   
        // [start, end)
        int i = start, j = end-1;
        while(i < j)
        {
          
   
            swap(str[i], str[j]);
            ++i;
            --j;
        }
    }
    string ReverseSentence(string str) {
          
   
        if(str.empty())
            return str;
        // 1. 每个子串进行逆置
        int i = 0, j = 0;
        while(i < str.size() && j < str.size())
        {
          
   
            // 找到第一个非空格字母
            while(i < str.size() && str[i] ==  )
                ++i;
            // 找到字母结尾处,即第一个空格
            j = i+1;
            while(j < str.size() && str[j] !=  )
                ++j;
            // 对字符串进行局部逆置
            _reverse(str, i, j);
            // j此时是空格
            i = j+1;          
        }

        // 2. 整体逆置
        _reverse(str, 0, str.size());
        return str;
    }
};
经验分享 程序员 微信小程序 职场和发展