557. 反转字符串中的单词 III

给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。

示例 1:
输入: “Let’s take LeetCode contest”
输出: “s’teL ekat edoCteeL tsetnoc”
注意:在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。

方法一:(istringstream)

//istringstream对象可以绑定一行字符串,然后以空格为分隔符把该行分隔开来。
class Solution {
public:
    string reverseWords(string s) {
        if (s == "")
            return s;
        string res = "", t = "";
        istringstream is(s);
        while (is >> t) {
            reverse(t.begin(), t.end());
            res += t + " ";
        }
        res.pop_back();
        return res;
    }
};

方法二:(用栈)

class Solution {
public:
    string reverseWords(string s) {
        if(s=="") return s;
        stack<char> st;
        string result = "";
        for(int i=0;i<s.length();i++){
            if(s[i]!=' ') st.push(s[i]); //若不为空格,进栈
            if(s[i]==' '||i==s.length()-1){ //若是空格或是最后一个,出栈,一个完整的单词出栈后补一个空格
                while(!st.empty()){
                    result += st.top();
                    st.pop();
                }
                result += ' ';
            }
        }
        result.pop_back(); //最后一个多了个空格,删掉
        return result;
    }
};

你可能感兴趣的:(LeetCode)