题目的主要信息:

  • 计算输入的字符串最后一个单词的长度,单词以空格隔开
  • 字符串末尾不以空格为结尾,长度小于5000

方法一:cin流输入

具体做法:

我们可以用利用C++的流输入(即cin),它可以直接将空格分割开,组成不同的单词,然后我们用每次都用相同的变量记录输入的单词,相当于遇到空格后变量s将重新填充新的单词。而最后变量中剩下来的单词就是字符串的最后一个单词,我们输出其长度即可。

#include<iostream>
#include<string>
using namespace std;

int main(){
    string s;
    while(cin >> s); //输入单词,以空格隔开
    cout << s.length() << endl; //输出最后一个单词的长度
    return 0;
}

复杂度分析:

  • 时间复杂度:O(n)O(n)O(n),相当于遍历输入的nnn个字符
  • 空间复杂度:O(1)O(1)O(1),临时变量s属于常数空间

方法二:遍历输入

具体做法:

我们可以遍历输入的每个字符,如果遇到非空格我们就将其添加到字符串中,如果遇到空格我们就清空刚刚得到的字符串,如此循环直到结束。因为结尾不会是空格,所以一定还剩余了一个字符串,那它的长度就是我们要求的。

alt

#include<iostream>
#include<string>
using namespace std;

int main(){
    char c;
    string s = "";
    while((c = getchar()) != '\n'){ //输入每个字符
        if(c == ' ') //如果是空格,前一个字符串清除
            s = "";
        else  //否则字符串添加
            s += c;
    }
    cout << s.length() << endl; //输出最后的长度
    return 0;
}

复杂度分析:

  • 时间复杂度:O(n)O(n)O(n),遍历每个字符
  • 空间复杂度:O(1)O(1)O(1),无额外空间使用