LeetCode151. Reverse Words in a String

题目链接:

https://leetcode.com/problems/reverse-words-in-a-string/

题目描述:

将字符串逆转。

For example,
Given s = “the sky is blue”,
return “blue is sky the”.

需要注意的是开头,中间,结尾可能会有多余的空格。麻烦的就是去掉多余的空格。

分析:

用istringstream的话,会变得很简单。先贴上istringstream的解决方案吧。stringstream对象可以绑定一行字符串,然后以空格为分隔符把该行分隔开来。这样就去掉了多余的空格。

第二种方法就是将每个单词先逆转了,最后再将整个字符串逆转。注意去掉多余空格。

第二个方法是参考别人的QAQ,找不到那篇文了,希望大神不要怪我没贴链接。

代码:

方法一:

class Solution {
public:
    void reverseWords(istringstream& ss,string &s){
        string word;
        if(ss>>word){
            reverseWords(ss,s);
            if(s==""){
                s=word;
            }
            else{
                s+=" "+word;
            }
        }
    }
    void reverseWords(string &s) {
        istringstream ss(s);
        reverseWords(ss,s="");
    }
};

方法二:

class Solution {
public:
    void reverse(string& s,int left,int right){
       while(left<right){
           char ch=s[right];
           s[right--]=s[left];
           s[left++]=ch;

       }
    }
    void reverseWords(string &s) {
        int len=s.size();
        int i=0,left=0,right=0;
        bool flag=false;
        while(i<len){
            while(i<len && s[i]==' '){
                i++;
            }
            if(i==len){
                break;
            }
            if(flag){
                s[right++]=' ';
            }
            left=right;
            while(i<len && s[i]!=' '){
                s[right++]=s[i++];
            }
            reverse(s,left,right-1);
            flag=true;
        }
        s.resize(right);
        reverse(s,0,right-1);
    }
};

你可能感兴趣的:(LeetCode,String)