最长最短单词

GitHub跳转原题关系图返回列表

将逗号视作分隔符后切词,利用 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;
}

复杂度

时间复杂度为 O(n)O(n),单词列表使用 O(n)O(n) 空间。

总结

Python 的 maxmin 对并列键值稳定,适合“第一个最值”问题。