LeetCode:翻转字符串里的单词(sqlit)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/yuanfuli/article/details/102759520

题目描述

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

示例 1:

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

示例 2:

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

说明:

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

思路1

先将字符串按照空格拆分,之后从后先前添加到字符串ss返回即可,注意最后一个不要加空格

代码实现

class Solution {
public:
    //思路:先将字符串按照空格拆分,之后从后先前添加到字符串ss返回即可,注意最后一个不要加空格
    string reverseWords(string s) {
        vector<string> tmp;
        tmp = string_sqlit(s," ");
        int size = tmp.size();
        string ss = "";
        for(int i = size -1; i >= 0; --i){
            ss += tmp[i];
            if(i == 0){
                continue;
            }
            ss += " ";
        }
        return ss;
    }

    //下面一段代码是使用STL来实现C++中的split,输入要拆分的字符串s,以及匹配模式,返回拆分后数组
    vector<string> string_sqlit(string s,string pattern){
        vector<string> result;
        int length = s.length();
        int index = s.find(' ');
        while(index != string::npos){
            string ss = s.substr(0,index);
            if(ss.length() != 0){ //防止出现连续空格
                result.push_back(ss);
            }
            s = s.substr(index+1,length);
            index = s.find(' ');
        }
        if(s.length() != 0){//最后一个也加进去
            result.push_back(s);
        }
        return result;
    }
};

思路2

字符串类stringstream来解决问题。首先将字符串存入一个字符串流中,输入操作>>就会自行提取不含空格的单词。

代码实现

//思路2:字符串类stringstream来解决问题。首先将字符串存入一个字符串流中,输入操作>>就会自行提取不含空格的单词。
    string reverseWords(string s){
        string ss = "";
        if(s.empty()) {return ss;}
        istringstream istr(s);
        string tmp;
        istr>>ss;
        while(istr>>tmp){
            ss = tmp + " " + ss;
        }
        return ss;
    }

思路3

可以使用栈来实现.

猜你喜欢

转载自blog.csdn.net/yuanfuli/article/details/102759520