Python入门习题(84)——OpenJudge百练习题:出现两次的字符

OpenJudge百练第4106号习题:出现两次的字符

  • 题目描述
  • 解题思路
  • 参考答案
  • 测试用例
  • 小结

题目描述

来源
OpenJudge网站 —— 百练习题集-第4106号习题

要求
总时间限制: 3000ms 单个测试点时间限制: 1000ms 内存限制: 65536kB

描述

给定一个字符串,求字符串中恰好出现2次的第一个字符。

输入
第一行是一个正整数n(int范围),表示共有n个字符串。
下面n行,每行是一个字符串,字符串的长度在int范围内。字符串由小写字母,大写字母和数字构成,不包含其他字符。
输出
总共n行,每行输出一个字符,该字符在对应的字符串中恰好出现2次(区分大小写)。如果有多个字符出现2次,输出在字符串中比较靠前的字符。输入数据保证每个字符串中必定有恰好出现2次的字符。
样例输入
3
farewell
20150106
PekingUniversity
样例输出
e
1
e

解题思路

  1. 利用Python的字典,统计字符出现次数很方便。但是,如何做到“有多个字符出现2次,输出在字符串中比较靠前的字符”?这要求记住字符出现顺序。
  2. Python的collections模块的OrderedDict能记住字符出现顺序。因为,OrderedDict能记住键值对插入顺序,遍历的时候按插入顺序来。

参考答案

from collections import OrderedDict
n = int(input())
for i in range(n):
    line = input()
    ch_count = OrderedDict()  #生成有序字典对象
    #统计字符出现次数
    for s in line:
        if s in ch_count:
            ch_count[s] += 1  #已经出现过
        else:
            ch_count[s] = 1  #第一次出现
    for ch, count in ch_count.items():  #按字符出现顺序遍历
        if count == 2:
            print(ch)
            break

测试用例

  1. 题目描述给出的测试用例有3组测试数据。第1组测试数据里头,有多个字符出现2次,输出了出现在前面的e字符。第2组测试数据内,只有1个字符出现2次。

  2. 一组测试数据。有多个字符出现2次。
    样例输入
    1
    0110
    样例输出
    0

  3. 出现2次的字符在尾部。
    样例输入
    1
    01102210233
    样例输出
    3

小结

  1. 利用Python collections模块的OrderedDict,简洁地解答了问题。
  2. Python内置模块提供了大量类似的函数或方法,是一个大宝藏,值得挖掘。

你可能感兴趣的:(Python入门100道习题,Python编程)