簡體   English   中英

計算字符串 Python 中的常見字符

[英]Count Common Characters in Strings Python

此代碼的輸出仍然是 4。但是,輸出應該是 3。存在集合交集,因為我相信這是答案的關鍵。 答案是 4 而不是 3 的原因來自於 s1 中與 s2 匹配的 2 個 qs 和 1 個 r 的數量。

s2 = "qsrqq"
s1 = "qqtrr"
counts1=0
counts2=0
letters= set.intersection(set(s1), set(s2))
for letter1 in set(s1):
    counts1 += s2.count(letter1)
for letter2 in set(s2):
    counts2 += s1.count(letter2)


counts = min(counts1, counts2)
print (counts)

非常感謝任何幫助。

如果要維護共同字符數的計數,則應使用collections.Counter而不是set

from collections import Counter

s2 = 'qsrqq' 
s1 = 'qqtrr'

common_letters = Counter(s1) & Counter(s2)  # => {'q': 2, 'r': 1}
print(sum(common_letters.values()))         # => 3

這是一個不涉及集合的解決方案:

s2 = sorted("qsrqq")
s1 = sorted("qqtrr")

count = 0
while len(s1)>0 and len(s2)>0:
    if s1[0] == s2[0]:
        count += 1
        s1 = s1[1:]
        s2 = s2[1:]
    elif s1[0] < s2[0]:
        s1 = s1[1:]
    else:
        s2 = s2[1:]

print(count)
#!/usr/bin/python
s2 = "qsrqq"
s1 = "qqtrr"
counts1=0
counts2=0
letters= set.intersection(set(s1), set(s2))
print ("letters: "+str(letters) + " intersection count: "+str(len(letters)))
for letter1 in set(s1):
    print ("letter1 " + str(letter1))
    counts1 += 1
for letter2 in set(s2):
    print ("letter2 " + str(letter2) )
    counts2 += 1

print ("counts1 " + str(counts1) + " counts2 " + str(counts2) )
counts = min(counts1, counts2)
print (counts)

這導致;

[~]$ python /tmp/test.py
letters: set(
['q', 'r']) intersection count: 2
letter1 q
letter1 r
letter1 t
letter2 q
letter2 s
letter2 r
counts1 3 counts2 3
3

分析,2 是正確答案(q 和 r 是兩者唯一共有的字母),3 是任一組唯一值的較低數量。

def commonCharacterCount(s1, s2):
    return sum( min(s1.count(char), s2.count(char)) for char in (set(s1) & set(s2)))

我替換了你原來的代碼塊

for letter1 in set(s1):
    counts1 += s2.count(letter1)

到:

for letter1 in set(s1):
    v = s2.count(letter1)
    print("{0}:{1}".format(letter1, v))
    counts1 += v

它輸出,它是出現次數的字母:

r:1
q:3
t:0

是正確的,字符串s2是 qsrqq 並且您檢查設置的 set(s1) 包含rq計數是正確的。 同樣,如果檢查第二個 for 循環,輸出為:

q:3
r:1
s:1

因此最小計數為 4。

對每個字母進行計數,並取最小值以找出兩個字符串共有多少個字母。 然后總結一下,這就是你的答案。

for letter in letters:
    counts1 += s1.count(letter)
    counts2 += s2.count(letter)
    counts += min(counts1, counts2)
    counts1 = 0
    counts2 = 0
print(counts)

這是不使用模塊的另一種方法。

sum(1 for i in zip(sorted(list(s1)), sorted(list(s2))) if len(set(i)) < 2)

3
def commonCharacterCount(s1, s2):
    s=0
    for i in list(set(s1)):
        count1=0
        count2=0
        if i in s2:
            count1 = s1.count(i)
            count2=  s2.count(i)
            s=s+min(count1,count2)

    return(s)

另一種方式,雖然很晚......

def commonCharacterCount(s1, s2):
    
    count = 0
    
    for i in range(len(s1)):
        for j in range(len(s2)):
            if(s1[i]==s2[j]):
                count +=1
                s2 = s2.replace(s2[j],"",1)
                break
    return count

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM