描述:找出字符串中第一个只出现一次的字符
数据范围:输入的字符串长度满足 1 \le n \le 1000 \1≤n≤1000
输入描述:输入一个非空字符串
输出描述:输出第一个只出现一次的字符,如果不存在输出-1
输入:asdfasdfo
输出:o
# 1/inputdef-list-set-dict
# 2/foriin-ifindict-dict+1
# 3/查值为1的set,1个则直接输出;多个则遍历instr-找每个字符串index小的输出
def exam1(instr):
instr = instr
idx = instr.index
# 记录默认初始化字符的索引,便于后面dict排序后仍然可获取到默认的顺序,因字符减少但是没新增其他字符,idx才有用
ins = list(instr)
keys = set(ins)
values = [0 for i in range(len(keys))]
dic = dict(zip(keys,values))
# 构建去重后list的字典,keys为字母,values初始化为0
# keysnew = sorted(keys,key=idx)
# print(keysnew)
# keysnew: ['a', 's', 'd', 'f', 'o']
# dic: {'a': 0, 'o': 0, 'd': 0, 's': 0, 'f': 0}
for i in ins:
if i in dic:
dic[i] += 1
# print(dic)
# {'o': 1, 'a': 2, 's': 2, 'f': 2, 'd': 2}
# 对去重的字典个数对应items每项目进行排序,排序以values倒序
low = sorted(dic.items(),key=lambda x:x[1],reverse=False)
# print(low)
# [('o', 1), ('f', 2), ('d', 2), ('a', 2), ('s', 2)]
# aabbccddeeff
# [('f', 2), ('d', 2), ('c', 2), ('e', 2), ('a', 2), ('b', 2)]
# 对倒叙的low里面取列表值单个元组的后1值为1,找对应元组0索引值,且按照初始化idx排序,则获取到第一位
res = sorted( [ i[0] for i in low if i[1] == 1],key=idx)
if len(res) == 0:
print(-1)
else:
print(res[0])
# 运用count函数,str.count(i)发现1个则打印对应的字符并赋值给cnt,否则打印cnt默认值-1
def exam2(instr):
cnt = -1
for i in instr:
if instr.count(i) == 1:
# print(i)
cnt = i
break
print(cnt)
instr = input().strip()
exam1(instr=instr)