题目 - 点击直达
- 1. HJ1 字符串最后一个单词的长度 简单
- 1. 题目详情
- 1. 原题链接
- 2. 题目要求
- 3. 基础框架
- 2. 解题思路
- 1. 思路分析
- 2. 时间复杂度
- 3. 代码实现
1. HJ1 字符串最后一个单词的长度 简单
1. 题目详情
计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000。(注:字符串末尾不以空格为结尾)
输入描述:
输入一行,代表要计算的字符串,非空,长度小于5000。
输出描述:
输出一个整数,表示输入字符串最后一个单词的长度。
1. 原题链接
nowCode HJ1 字符串最后一个单词的长度 简单
2. 题目要求
示例
输入:
h e l l o n o w c o d e r hello nowcoder hellonowcoder
复制
输出:
8 8 8
说明:
最后一个单词为 n o w c o d e r nowcoder nowcoder,长度为 8 8 8
3. 基础框架
● Cpp代码框架
#include <iostream>
using namespace std;
int main() {
return 0;
}
// 64 位输出请用 printf("%lld")
2. 解题思路
1. 思路分析
(
1
)
(1)
(1) 从输入流
c
i
n
cin
cin读取内容,因为空格字符也要被读取,所以不能使用
s
c
a
n
f
scanf
scanf和
>
>
>>
>>运算符重载函数,二者均把空格和换行符作为读取结束的标志,需要使用
g
e
t
l
i
n
e
getline
getline函数;
(
2
)
(2)
(2) 单词之间以空格分隔,要找到最后一个单词,直接倒着找第一个空格字符的位置
p
o
s
pos
pos,
p
o
s
pos
pos的下一个位置就是最后一个单词的起始位置,单词长度就是
s
.
s
i
z
e
(
)
−
p
o
s
−
1
s.size()-pos-1
s.size()−pos−1,注意下标相减时的边界是否考虑;
(
3
)
(3)
(3) 找不到空格时
g
e
t
l
i
n
e
getline
getline函数返回
s
t
d
:
:
s
t
r
i
n
g
:
:
n
p
o
s
std::string::npos
std::string::npos,值一般是size_t
的-1
,说明没有单词或只有一个单词,依然满足
s
.
s
i
z
e
(
)
−
p
o
s
−
1
s.size()-pos-1
s.size()−pos−1;
2. 时间复杂度
O ( N ) O(N) O(N)
3. 代码实现
#include <iostream>
#include <string>
using namespace std;
int main() {
string s;
getline(cin, s);
size_t pos = s.rfind(' ');
cout << s.size() - pos - 1 << endl;
return 0;
}