题解 | #单词倒排#

单词倒排

http://www.nowcoder.com/practice/81544a4989df4109b33c2d65037c5836

题意:



方法一:
模拟

思路:
        直接模拟。
        遍历字符串,将单词提取出来。
        最后逆向输出单词。



#include <bits/stdc++.h>

using namespace std;

int main(){
    string s;
    getline(cin,s);
    
    int len=s.size();
    vector<string> v;
    string x="";
    for(int i=0;i<len;i++){//遍历
        if((s[i]>='a'&&s[i]<='z')||(s[i]>='A'&&s[i]<='Z')){//如果是字母,则组成单词
            x+=s[i];
        }else{//否则,如果x非空,则收集一个单词
            if(x!=""){
                v.push_back(x);
                x="";
            }
               
        }
    }
    if(x!=""){
        v.push_back(x);
        x="";
    }
    
    for(int i=v.size()-1;i>=0;i--){//逆向输出
        cout << v[i] << " ";
    }
    
    return 0;
}

时间复杂度:
空间复杂度:

方法二:
stringstream类

思路:
        stringstream可以分割以空格作为分隔符的字符串。
        因此,可以先将非字母的字符变为空格,然后利用stringstream分割字符串。

#include <bits/stdc++.h>

using namespace std;

int main(){
    string s;
    getline(cin,s);
    
    int len=s.size();
    for(int i=0;i<len;i++){//将非字母的字符变为空格
        if(!isalpha(s[i]))
            s[i]=' ';
    }
    vector<string> v;//单词数组
    stringstream ss(s);//stringstream可以分割以空格作为分隔符的字符串
    string x;
    while(ss >> x){
        v.push_back(x);
    }
    
    for(int i=v.size()-1;i>=0;i--){//逆向输出
        cout << v[i] << " ";
    }
    
    return 0;
}

时间复杂度:
空间复杂度:


全部评论

相关推荐

xiaowl:1. 技能堆叠没有意义,精简下,而且里面的精通、熟练等内容,其实经不起推敲,这里可以简单写清楚你在前端、后端等领域,有哪些你自己比较经验丰富熟练的技能,以及哪些有过一定涉猎,做一定区分度 2. 项目方案有些单薄,但是这个项目本身还是有很多挑战点的,你应该思考下对于里面有难题的挑战点,你是怎么解决的,避免泛泛而谈。比如,多人编辑是一个老大难问题,包括了互斥、协作等,这里可以详细讲一讲你怎么设计解决问题的。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务