题目描述
来源
OpenJudge网站 —— 百练习题集-第4106号习题
要求
总时间限制: 3000ms 单个测试点时间限制: 1000ms 内存限制: 65536kB
描述
给定一个字符串,求字符串中恰好出现2次的第一个字符。
输入
第一行是一个正整数n(int范围),表示共有n个字符串。
下面n行,每行是一个字符串,字符串的长度在int范围内。字符串由小写字母,大写字母和数字构成,不包含其他字符。
输出
总共n行,每行输出一个字符,该字符在对应的字符串中恰好出现2次(区分大小写)。如果有多个字符出现2次,输出在字符串中比较靠前的字符。输入数据保证每个字符串中必定有恰好出现2次的字符。
样例输入
3
farewell
20150106
PekingUniversity
样例输出
e
1
e
解题思路
- 利用Python的字典,统计字符出现次数很方便。但是,如何做到“有多个字符出现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
测试用例
-
题目描述给出的测试用例有3组测试数据。第1组测试数据里头,有多个字符出现2次,输出了出现在前面的e字符。第2组测试数据内,只有1个字符出现2次。
-
一组测试数据。有多个字符出现2次。
样例输入
1
0110
样例输出
0 -
出现2次的字符在尾部。
样例输入
1
01102210233
样例输出
3
小结
- 利用Python collections模块的OrderedDict,简洁地解答了问题。
- Python内置模块提供了大量类似的函数或方法,是一个大宝藏,值得挖掘。