我最近开始练习Codefights,它应该是在线面试问题的一个很好的练习空间。
问题是,这是我在python中的解决方案,用于查找字符串中第一个非重复字符的简单问题:
def firstNotRepeatingCharacter(s):
d = dict()
for i in range(len(s)):
key = s[i]
print d
if key in d:
d[key] += 1
else:
d[key] = 1
found = '_'
for key in d:
if d[key] == 1:
found = key
break
return found
当我在我的本地jupyter笔记本上运行时,给出了以下输出:
firstNotRepeatingCharacter('abacabad')
{}
{'a': 1}
{'a': 1, 'b': 1}
{'a': 2, 'b': 1}
{'a': 2, 'b': 1, 'c': 1}
{'a': 3, 'b': 1, 'c': 1}
{'a': 3, 'b': 2, 'c': 1}
{'a': 4, 'b': 2, 'c': 1}
Out[89]:
'c'
哪个太棒了。这就是答案。
但是在codefights env上运行相同的操作会出错:
所以我的问题是,我是一个python noob,在字典中追加它是否为随机位置添加键还是有序的? 或者输出差异是因为jupyter noteboook和他们的在线编译器的python env有些不同。
答案 0 :(得分:0)
它没有按顺序存储。您可以尝试使用OrderedDict
https://docs.python.org/3/library/collections.html#collections.OrderedDict
答案 1 :(得分:0)
您可以使用collections.Counter
计算字符出现次数。
由于dictionary have no order中的键,您需要遍历字符串:
import collections
def first_singleton(s):
counter = collections.Counter(s)
for c in s:
if counter[c] == 1:
return c
return None
print(first_singleton('abacabad'))