Skip to content

Latest commit

 

History

History
103 lines (92 loc) · 2.59 KB

151_翻转字符串里的单词.md

File metadata and controls

103 lines (92 loc) · 2.59 KB

题目

给定一个字符串,逐个翻转字符串中的每个单词。

示例1

输入: "the sky is blue"
输出: "blue is sky the"

示例2

输入: "  hello world!  "
输出: "world! hello"
解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。

示例3

输入: "a good   example"
输出: "example good a"
解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。

说明

  • 无空格字符构成一个单词。
  • 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
  • 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。

代码(C风格)

class Solution {
public:
    vector<string> my_split(string str,string delim){
        vector<string> res;
        if("" == str) return res;
        char* strs = new char[str.length() + 1];
        strcpy(strs, str.c_str()); 
        char * d = new char[delim.length() + 1];
        strcpy(d, delim.c_str());
        char *p = strtok(strs, d);
        while(p) {
            string s = p;
            res.push_back(trim(s));
            p = strtok(NULL, d);
        }
        reverse(res.begin(),res.end());
        return res;
    }
    
    string trim(string &s) 
    {
        if (s.empty()) 
        {
            return s;
        }
        s.erase(0,s.find_first_not_of(" "));
        s.erase(s.find_last_not_of(" ") + 1);
        return s;
    }
    string print(vector<string> v){
        stringstream ss;
        for(size_t i = 0; i < v.size(); ++i)
        {
          if(i != 0)
            ss << " ";
          ss << v[i];
        }
        return ss.str();
    }
    string reverseWords(string s) {
        return print(my_split(trim(s)," "));
    }
};

代码(利用stringstream)

class Solution {
public:
    string reverseWords(string s) { 
        stringstream ss(s);
        string str;
        vector<string> tmp;
        while (ss >> str){ 
            tmp.push_back(str);
        }
        string ans;
        for (int i = tmp.size() - 1; i >= 0; i--){
            ans += tmp[i] + " ";
        }
        return ans.size() ? string(ans.begin(), ans.end() - 1) : "";
    }
};

思路

解法1

写一大堆c++标准库里面没有的函数就可以,其实用python一行就能解决,但是写起来比较累容易出错。

解法2

其实也可以利用stringstream可以自动去空格的特性,写起来很快也很容易理解,就是一个逆序处理需要注意下,对时间影响比较大。