58剑指OFFER之翻转单词顺序(此解答要注意,string没有‘\0’)

参考资料:

[1]牛客000001号的回答以及评论(方法巧妙,只能记住来用):
https://www.nowcoder.com/profile/2578911/codeBookDetail?submissionId=14316753

思路:

先整体翻转,再对每个单词进行各自翻转,遇到空格或遇到'\0'翻转一下就行。

关键词:
注意:

如果就一个单词,"Wonderful",你的思路是有问题的。
遇到一个空格算一个,要先增加一个空格。

自己的解答:
class Solution {
public:
    string ReverseSentence(string str) {
        
        //代码的思路是:首先进行部分翻转,再进行全部翻转
        if(str.empty())
            return str;
        int nLen = str.size();
        str+=' ';
        int mark = 0;
        //1.首先进行部分翻转
        for(int i=0;i<(nLen+1);i++)
        {
            if(str[i] == ' ')
            {
                ReverseWord(str,mark,i-1);
                mark=i+1;
            }
        }
        //2.在进行全部翻转
        str= str.substr(0,nLen);
        ReverseWord(str,0,nLen-1);
        return str;
    }
    
    
    void ReverseWord(string& str,int l,int r)
    {
        while(l<r)
        {
             swap(str[l],str[r]);
            l++;
            r--;
        }
    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。