一尘不染

查找字符串中的第一个非重复字符

algorithm

我读了一个求职面试问题,为以下内容写一些代码:

编写高效的函数以查找字符串中的第一个非重复字符。例如,“ 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

有没有更简洁有效的答案?


阅读 191

收藏
2020-07-28

共1个答案

一尘不染

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

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
2020-07-28