将逗号视作分隔符后切词,利用 max 与 min 的稳定性保留首次极值。
OJ: noi_openjudge
题目 ID: ch0107-25
难度:入门
标签:字符串模拟python
日期: 2026-07-30 23:01
题意
句子以空格或逗号分隔单词,输出第一个最长单词和第一个最短单词。
思路
先把逗号替换为空格再切分。max(words, key=len) 与 min(words, key=len) 在并列时保留首次出现的元素,恰好符合题意。
代码
Python代码
python
words = input().replace(",", " ").split()
print(max(words, key=len))
print(min(words, key=len))C++代码
cpp
#include <cstdio>
#include <cstring>
char str[5000];
int idx = 0;
char tmp[105];
char max_word[105];
char min_word[105];
int flag = 1;
int next_word(){
while(1){
if(str[flag] != ' ' )
break;
flag++;
}
if( flag == idx+1){
return -1;
}
int cnt = 0;
while(1) {
if( str[flag] == ' ' || flag == idx+1){
tmp[cnt] = '\0';
return 0;
}
else {
tmp[cnt++] = str[flag];
flag++;
}
}
return 0;
}
int main(){
char t;
while ( scanf("%c",&t)!=EOF) {
if( t == ',')
t = ' ';
else if ( t == '\n' || t == '\r')
break;
str[++idx] = t;
}
int max_w = -1,min_w = 999999;
while(1){
if( next_word() == -1){
break;
}
//printf("%s\n",tmp);
int len = strlen(tmp);
if( max_w < len){
max_w = len ;
strcpy(max_word,tmp);
}
if( min_w > len){
min_w = len ;
strcpy(min_word,tmp);
}
}
printf("%s\n",max_word);
printf("%s",min_word);
return 0;
}复杂度
时间复杂度为
总结
Python 的 max 和 min 对并列键值稳定,适合“第一个最值”问题。