三级
C++ 算法考级专栏
真题分析、矩阵探测、递归回溯与基础语法
🎨 视觉封面【GESP】C++三级练习 luogu-B2121 最长最短单词
📅 2025-04-14·✍️ OneCoder·计算中...·⏱️ 6 分钟
#GESP#C++#字符串
GESP三级练习,字符串练习(C++三级大纲中6号知识点,字符串),难度★★☆☆☆。
luogu-B2121 最长最短单词
题目要求
题目描述
输入 行句子(不多于 个单词,每个单词长度不超过 ),只包含字母、空格、逗号和句号。单词由至少一个连续的字母构成,空格、逗号和句号都是单词间的间隔。
输出第 个最长的单词和第 个最短单词。
输入格式
输入数据:一行句子。
输出格式
输出数据:
第 行,第一个最长的单词。
第 行,第一个最短的单词。
输入输出样例 #1
输入 #1
BASH
I am a student,i am studying Programming language C in Peking University.
输出 #1
BASH
Programming
I
题目分析
解题思路
- 读取一整行输入的句子,包含单词、空格、逗号和句号
- 遍历句子中的每个字符:
- 遇到字母时,将其加入当前单词
- 遇到分隔符(空格、逗号或句号)时,判断当前单词:
- 如果当前单词长度大于最长单词,更新最长单词
- 如果当前单词长度小于最短单词,更新最短单词
- 清空当前单词,准备处理下一个单词
- 遍历结束后,还需要检查最后一个单词(如果句子不以分隔符结尾)
- 按要求格式输出最长和最短单词:
- 第一行输出最长单词
- 第二行输出最短单词
复杂度分析:
- 时间复杂度为 ,其中n为输入句子的总长度
- 空间复杂度为 ,其中m为最长单词的长度
示例代码
CPP
#include <iostream>
#include <string>
int main() {
// 定义输入字符串变量
std::string str;
// 读取一整行输入,包含空格
std::getline(std::cin, str);
// 获取字符串长度
int length = str.length();
// 初始化最大长度和最小长度
int max_length = 0;
int min_length = 100;
// 存储最长和最短单词
std::string str_max, str_min;
// 当前单词字符计数
int count = 0;
// 遍历字符串的每个字符
for (int i = 0; i < length; i++) {
// 遇到分隔符(空格、逗号、句号)时处理当前单词
if (str[i] == ' ' || str[i] == ',' || str[i] == '.') {
// 跳过连续的分隔符
if (count == 0) {
continue;
}
// 更新最长单词
if (count > max_length) {
max_length = count;
str_max = str.substr(i - count, count);
}
// 更新最短单词
if (count < min_length) {
min_length = count;
str_min = str.substr(i - count, count);
}
// 重置计数器
count = 0;
}
// 处理最后一个字符
else if (i == length - 1) {
count++;
// 更新最长单词
if (count > max_length) {
max_length = count;
str_max = str.substr(i - count + 1, count);
}
// 更新最短单词
if (count < min_length) {
min_length = count;
str_min = str.substr(i - count + 1, count);
}
}
// 累加字母计数
else {
count++;
}
}
// 输出结果
std::cout << str_max << std::endl;
std::cout << str_min << std::endl;
return 0;
}
💡 OneCoder 资源指引
所有代码开源上传至 GitHub:yummy-code 仓库 · GESP 专题站:GESP WIKI
🤝 技术交流与答疑
欢迎加入:C++ GESP/CSP 考级答疑群(688906745) 与 Java/Python交流群(982860385),点击可直接加群。
📚
猜你想读 · 相关文章推荐
GESP 编程与算法 · 三级⏱️ 3 分钟
【GESP】C++三级练习BCQM3091,选择题判定
GESP三级字符串string和一级知识点if-else分支语句练习,非常基础,对于我孩子来说练习重点在一级部分,字符串只是碰巧遇到了。
阅读全文 →
GESP 编程与算法 · 三级⏱️ 4 分钟
【GESP】C++三级练习 luogu-B2109 统计数字字符个数
GESP三级练习,字符串练习(C++三级大纲中6号知识点,字符串),难度★✮☆☆☆。
阅读全文 →
GESP 编程与算法 · 三级⏱️ 4 分钟
【GESP】C++三级练习 luogu-B2110 找第一个只出现一次的字符
GESP三级练习,字符串和数组练习(C++三级大纲中5号知识点,一维数组和6号知识点,字符串),难度★★☆☆☆。
阅读全文 →
OneCoder (lihongzheshuai)
一个中年人的自留地,记录学习 C++、GESP/NOI、Java、Python 与算法架构的心得体会。本站唯一网址:coderli.com
💬 读者留言与交流
还没有留言,快来成为第一个讨论者吧!