计算字符串中出现的字符数

2024-03-29 15:10:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道“驯鹿”(以任何顺序)以随机字符串的形式出现的频率,以及移除“驯鹿”后剩下的字符串是什么。我需要保留剩余字符串的顺序

比如说

"erindAeer" -> A(驯鹿来了一次)

"ierndeBeCrerindAeer" -> ( 2 reindeers, left over is BCA)

我想把“驯鹿”分类并移除,但我需要保持秩序。做这件事的好方法是什么


Tags: 方法字符串顺序is分类秩序left形式
3条回答

下面是一个使用collections.Counter的非常简单的方法:

from collections import Counter

def purge(pattern, string):
    scount, pcount = Counter(string), Counter(pattern)
    cnt = min(scount[x] // pcount[x] for x in pcount)
    scount.subtract(pattern * cnt)
    return cnt, "".join(scount.subtract(c) or c for c in string if scount[c])

>>> purge("reindeer", "ierndeBeCrerindAeer")
(2, 'BCA')

我们可以在知道这些字母重复多少次后替换它们,并且Counter便于计算元素

from collections import Counter

def leftover(letter_set, string):
    lcount, scount = Counter(letter_set), Counter(string)
    repeat = min(scount[l] // lcount[l] for l in lcount)
    for l in lcount:
        string = string.replace(l, "", lcount[l] * repeat)
    return f"{repeat} {letter_set}, left over is {string}"

print(leftover("reindeer", "ierndeBeCrerindAeer"))
print(leftover("reindeer", "ierndeBeCrerindAeere"))
print(leftover("reindeer", "ierndeBeCrerindAee"))

输出:

2 reindeer, left over is BCA
2 reindeer, left over is BCAe
1 reindeer, left over is BCerindAee

以下是Python中的代码:

def find_reindeers(s):
    rmap = {}
    for x in "reindeer":
        if x not in rmap:
            rmap[x] = 0
        rmap[x] += 1

    hmap = {key: 0 for key in "reindeer"}
    for x in s:
        if x in "reindeer":
            hmap[x] += 1

    total_occ = min([hmap[x]//rmap[x] for x in "reindeer"])

    left_over = ""
    print(hmap, rmap)
    for x in s:
        if (x in "reindeer" and hmap[x] > total_occ * rmap[x]) or (x not in "reindeer"):
            left_over += x

    return total_occ, left_over

print(find_reindeers("ierndeBeCrerindAeer"))

ierndeBeCrerindAeer的输出:

(2, "BCA")

相关问题 更多 >