我读了一个求职面试问题,为以下内容写一些代码:
编写高效的函数以查找字符串中的第一个非重复字符。例如,“ total”中的第一个非重复字符为“ o”,“ teeter”中的第一个非重复字符为“ r”。讨论算法的效率。
我用Python提出了这个解决方案。但是,我敢肯定,还有很多更漂亮的方法可以做到这一点。
word="googlethis" dici={} #build up dici with counts of characters for a in word: try: if dici[a]: dici[a]+=1 except: dici[a]=1 # build up dict singles for characters that just count 1 singles={} for i in dici: if dici[i]==1: singles[i]=word.index(i) #get the minimum value mini=min(singles.values()) #find out the character again iterating... for zu,ui in singles.items(): if ui==mini: print zu
有没有更简洁有效的答案?
In [1033]: def firstNonRep(word): ......: c = collections.Counter(word) ......: for char in word: ......: if c[char] == 1: ......: return char ......: In [1034]: word="googlethis" In [1035]: firstNonRep(word) Out[1035]: 'l'
编辑 :如果您想实现相同的事情而不使用像这样的帮助器Counter:
Counter
def firstNonRep(word): count = {} for c in word: if c not in count: count[c] = 0 count[c] += 1 for c in word: if count[c] == 1: return c