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內置模塊提供了大量類似的函數或方法,是一個大寶藏,值得挖掘。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章