剑指offer Leetcode 58 - I. 翻转单词顺序

image-20201217213711728

image-20201217213717602

我的解法:(双指针从左往右遍历,效率差,不使用)

思想:

​ 双指针获得每个单词,然后连起来。

复杂度:

​ string的相加效率很低

缺点:

​ 从左往右遍历时,后面的答案需要添加到字符串左边,所以效率很低。

​ 从右往左遍历时,直接用+=就好

代码:

class Solution {
    
    
public:
    string reverseWords(string s) {
    
    
        if(s.empty())
            return "";
        int left = 0, right = 0;
        string ans = "";
        while(right < s.size()){
    
    
            while(s[right] != ' ' && right < s.size())
                right++;
            if(right - left > 0){
    
    
                ans = s.substr(left, right - left) + ans;
                ans = " " + ans;
            }
            while(s[right] == ' ' && right < s.size())
                right++;
            left = right;
        }
        if(ans.empty())
            return "";
        return ans.substr(1, ans.size() - 1);
    }
};

正确解法1:双指针从右向左

思想:

复杂度:

代码注意点:

●遍历顺序,左到右还是右到左?

●right和left哪个要判断 < 0?

●找到一个单词后,怎么更新left/right来继续下一次遍历?

●返回值的分类讨论?

代码:

class Solution {
    
    
public:
    string reverseWords(string s) {
    
    
        string res = "";
        int s_size = s.size();
        if(s_size == 0)
            return "";
        int right = s_size - 1;
        while(right >= 0){
    
    
            //从后往前寻找第一字符
            while(s[right] == ' ' && right >= 0)
                right--;
            //right为-1会报错,而left为-1不会有问题,所以只要判断right
            if(right < 0)
                break;
            //从后往前寻找第一个空格
            int left = right;
            while(left >= 0 && s[left] != ' ')
                left--;
            //添加单词到结果
            res += s.substr(left + 1, right - left);
            res += ' ';
            //更新right到left,下次从这里开始访问
            right = left;
        }
        if(!res.empty())
            res.pop_back();
        return res;
    }
};

解法2:istringstream

https://leetcode-cn.com/problems/fan-zhuan-dan-ci-shun-xu-lcof/solution/cshuang-bai-zhan-by-orange-32/

扫描二维码关注公众号,回复: 12663832 查看本文章

猜你喜欢

转载自blog.csdn.net/qq_36459662/article/details/113955512