Python:获取字符串中第一个"encountered"个重复的字符

Python: Get the first "encountered" duplicated character in a string

我想知道是否有更有效的方法来解决以下编码测试:

问题:仅当检测到多个重复字符时才获取​​字符串中遇到的第一个重复字符,否则 return None'

示例:

#1 'abbcdefa' = return 'b' 因为是字符串中第一个遇到的DUPLICATE字符,而重复的'a'字符出现的时间比重复的要晚很多'b'.

#2 'abcdefa' = None(因为 a 是字符串中唯一的重复字符)

def first_dup_char(A):
    seen, dups = [], []
    for i in A:
        if i in seen:
            dups.append(i)
        else:
            seen.append(i)
    # if dups list items > 1 then return the first dup else print None
    return dups[0] if len(dups) > 1 else 'None'

我上面的解决方案通过使用两个列表来工作。我想使用 set() 和 dict,但不幸的是它们都是无序的,除非我遗漏了什么?

你可以使用一个集合来更新你在循环时遇到的字母

def first_dup_char(A) :

    seen = set()
    first_dup = None 

    for c in A :
        if c in seen  : 
            if first_dup == None : first_dup = c
            else : return first_dup
        else :
            seen.add(c)
    
    return None

A = "abbcdefa"
print(first_dup_char(A)) # b
B = "abcdefa"
print(first_dup_char(B)) # None

使用变量 first_dup 你不会丢失第一个重复的信息,而且你会知道你何时已经达到两对重复,这样你就可以 return第一个没有 运行 循环直到结束。