按空白切分单词,用 set 去重后按 Python 字符串字典序排序。
OJ: noi_openjudge
题目 ID: ch0110-10
难度:入门
标签:排序字符串集合python
日期: 2026-07-30 23:01
题意
输入一行由一个或多个空格分隔的单词,区分大小写,去重后按字典序逐行输出。
思路
split() 会把连续空白都视为分隔符,正好适合本题。先用 set 去重,再对集合调用 sorted。Python 字符串默认按字典序比较,并区分大小写。
代码
Python代码
python
words = sorted(set(input().split()))
print(*words, sep="\n")C++代码
cpp
#include <cstdio>
#include <cstring>
#define cpy(a,b) memcpy(a,b,sizeof(a));
char word[200][100];
int cnt=0;
void init(){
char t[100];
int i;
while( scanf("%s",t) != EOF){
bool find_flag = false;
for(i=1;i<=cnt;i++){
int cmp = strcmp(t,word[i]);
if(cmp == 0){
find_flag = 1;
break;
}
}
if( find_flag)
continue;
cnt++;
memcpy(word[cnt], t, sizeof(t));
}
}
// >=
bool greater(char s1[],char s2[]){
int ans = strcmp(s1, s2);
if( ans == 0) return 1;
if( ans > 0)
return 1;
return 0;
}
void xchg( char s1[],char s2[]){
char t[100];
memcpy(t, s1, sizeof(t));
memcpy(s1, s2, sizeof(t));
memcpy(s2, t, sizeof(t));
}
void quick_sort(int l,int r){
if( l >= r) return ;
char key[100];
cpy(key,word[l]);
int i = l,j = r;
while(i != j){
while( i < j && greater(word[j], key))
j--;
while( i < j && greater( key,word[i]))
i++;
if( i < j)
xchg(word[i],word[j]);
}
cpy(word[l],word[i]);
cpy(word[i],key);
quick_sort(l, i-1);
quick_sort(i+1, r);
}
int main(){
init();
quick_sort(1, cnt);
int i;
for (i=1;i<=cnt;i++){
printf("%s\n",word[i]);
}
return 0;
}复杂度
设不同单词数为
总结
split、set、sorted 依次对应切分、去重、排序三个独立步骤。