单词排序

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

用 set 去重并按 ASCII 字典序输出所有不同单词。

OJ: roj

题目 ID: 1185

难度:入门

标签:排序字符串集合输入输出python

创建: 2026-09-29 22:38

更新: 2026-10-05 04:41

题目描述

输入一行单词序列,相邻单词之间由 1 个或多个空格间隔。按字典序输出这些单词,重复的单词只输出一次(区分大小写)。数据范围:1⩽n⩽1001 \leqslant n \leqslant 100,每个单词长度不超过 50,只含大小写字母。

思路

用 cin >> word 按任意空白切分单词,set<string> 自动去重并按键的 ASCII 顺序排序,最后遍历输出即可。

参考代码

Python 版:

python
#!/usr/bin/env python3
# Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
# rbook: -> https://rbook.roj.ac.cn  https://rbook2.roj.ac.cn
# rainboy的学习导航网站: https://idx.roj.ac.cn
# create_at: 2026-09-29 22:38
# update_at: 2026-09-29 22:40

import sys


def solve() -> None:
    words = sys.stdin.buffer.read().split()  # 按任意空白切分,天然吃掉 1 个或多个空格
    # 输入只含字母,字节序与 ASCII 字典序一致(大写在前),所以直接用 set 去重、sorted 排序;
    # 重复单词只留一份,最后一行也要有换行符,所以末尾补一个 b'\n'
    sys.stdout.buffer.write(b'\n'.join(sorted(set(words))) + b'\n')


if __name__ == "__main__":
    solve()

C++ 版(同一算法):

cpp
/**
 * Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
 * rbook: -> https://rbook.roj.ac.cn  https://rbook2.roj.ac.cn
 * rainboy的学习导航网站: https://idx.roj.ac.cn
 * create_at: 2026-10-05 04:41
 * update_at: 2026-10-05 04:41
 */

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    set<string> words;      // 自动去重,并按 ASCII 字典序排序
    string w;
    while (cin >> w) {      // 按任意空白切分,可处理 1 个或多个空格
        words.insert(w);
    }

    for (auto it = words.begin(); it != words.end(); ++it) {
        cout << *it << '\n';
    }
    return 0;
}