lintcode 翻转字符串

给定一个字符串,逐个翻转字符串中的每个单词。
说明
单词的构成:无空格字母构成一个单词
输入字符串是否包括前导或者尾随空格?可以包括,但是反转后的字符不能包括
如何处理两个单词间的多个空格?在反转字符串中间空格减少到只含一个
样例
给出s = "the sky is blue",返回"blue is sky the"

先给出一个通用方法
就是先翻转整个字符串,再把每个单词翻转,就可以得到结果。
开始循环,遇到空格符直接跳过,如果是非空格,如果index不为0说明不是第一个单词,那么在他后面加个空格符。然后通过while循环找到下一个空格的位置。最后resize重置s的大小。

class Solution {
public:
    /**
     * @param s : A string
     * @return : A string
     */
    string reverseWords(string s) {
        // write your code here
        reverse(s.begin(),s.end());
        int index = 0;
        for (int i = 0;i < s.size();i++) {
            if (s[i] != ' ') {
                if (index != 0) s[index++] = ' ';
                int j = i;
                while (j < s.size() && s[j] != ' ') s[index++] = s[j++];
                reverse(s.begin() + index - (j - i),s.begin() + index);
                i = j;
            } 
        }
        s.resize(index);
        return s;
    }
};

再给出一个C++的简单的方法:

class Solution {
public:
    /**
     * @param s : A string
     * @return : A string
     */
    string reverseWords(string s) {
        // write your code here
        istringstream in(s);
        string temp;
        in >> s;
        while (in >> temp) s = temp + " " + s;
        return s[0] == ' ' ? "" : s;
    }
};

你可能感兴趣的:(lintcode 翻转字符串)