EOJ 3124 单词表(排序)

来源:互联网 发布:nginx是什么服务器 编辑:程序博客网 时间:2024/04/30 05:41

题目

http://acm.ecnu.edu.cn/problem/3124/

提取英文文本中的单词,重复出现的单词只取一个,把它们按照字典顺序排序,建立为一个单词表。
注意:单词与单词之间用空格或标点符号(逗号 (,),句号 (.), 惊叹号 (!), 问号 (?))分隔;提取的单词只包含 26 个英文字符。

解题思路

用C++做可能比较麻烦,直接上python的re模块。

re.split()的第一个参数指明分隔符的模式,第二个参数为要分割的字符串。由于本题有多个分隔符,因此选取的模式使用正则表达式。[,;.!?\s]表示匹配括号中的任意一个。更多详见使用多个界定符分割字符串。

str = list(set(str))用于对列表str中的元素去重,虽然这样会使得元素顺序被打乱,但考虑到后面依然要排序,所以这样写没有问题。

AC代码

#coding=utf-8import rekase = int(input())for t in range(kase):    str = raw_input()    str = re.split('[,;.!?\s]', str) #多分隔符    str = list(set(str)) #去重    print str    str.sort()    output = ""    print "case #%d:"%t    for (i, v) in enumerate(str):        if v == '':            continue        output += v        if i != len(str) - 1:            output += ' '    print output
原创粉丝点击