通過列表修改字元串的坑
- 2022 年 4 月 21 日
- 筆記
背景:華為機試題 HJ23 刪除字元串中出現次數最少的字元
描述
實現刪除字元串中出現次數最少的字元,若出現次數最少的字元有多個,則把出現次數最少的字元都刪除。輸出刪除這些單詞後的字元串,字元串中其它字元保持原來的順序。
數據範圍:輸入的字元串長度滿足 1 \le n \le 20 \1≤n≤20 ,保證輸入的字元串中僅出現小寫字母
輸入描述:
字元串只包含小寫英文字母, 不考慮非法輸入,輸入的字元串長度小於等於20個位元組。
輸出描述:
刪除字元串中出現次數最少的字元後的字元串。
示例1
輸入:
aabcddd
輸出:
aaddd
我的錯誤程式碼:
a = 'aabbceecc'
a = list(a)
print(a)
b =list(set(a))
dict1 = {}
for i in b:
dict1[i] = a.count(i)
print(dict1)
min_num = min(list(dict1.values()))
for k,v in dict1.items():
if v ==min_num:
for x in a:
if x == k:
a.remove(x) #當移除列表 ['a', 'a', 'b', 'b', 'c', 'e', 'e', 'c', 'c']中的e時,列表發生變化,剩下的e索引
#變為5,下次循環跳過了這個 e,從而產生bug
print(''.join(a))
# print(list(a))
分析:通過列表操作字元串,因為列表是可變的,操作起來很容易產生bug。想到定義一個空字元串,用字元串拼接的方式
新的程式碼:
a = input()
b = ''
dict1 = {}
list_min_key =[]
for i in a:
dict1[i] = a.count(i)
# print(dict1) dict1如下 :{'a': 2, 'b': 2, 'c': 3, 'e': 2}
min_num = min(list(dict1.values()))
#把出現最小次數的鍵,放在列表中list_min_key =[]
for k,v in dict1.items():
if v ==min_num:
list_min_key.append(k)
# print(list_min_key)
for x in a:
if x not in list_min_key:
b = b+x
print(b)
