EOJ 3124 单词表(排序)

题目

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

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

解题思路

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

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

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

AC代码

#coding=utf-8
import re

kase = 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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值