题目的主要信息:
- 计算输入的字符串最后一个单词的长度,单词以空格隔开
- 字符串末尾不以空格为结尾,长度小于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),相当于遍历输入的n个字符
- 空间复杂度:O(1),临时变量s属于常数空间
方法二:遍历输入
具体做法:
我们可以遍历输入的每个字符,如果遇到非空格我们就将其添加到字符串中,如果遇到空格我们就清空刚刚得到的字符串,如此循环直到结束。因为结尾不会是空格,所以一定还剩余了一个字符串,那它的长度就是我们要求的。
#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(1),无额外空间使用