簡體   English   中英

計算字符串中出現的字符數

[英]count characters occurences in string

我想知道“馴鹿”(以任何順序)出現在隨機字符串中的頻率以及刪除“馴鹿”后剩下的字符串是什么。 我需要保留剩余字符串的順序

所以例如

"erindAeer" -> A (馴鹿來了 1 次)

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

我想過排序和刪除“馴鹿”,但我需要保留順序。 有什么好方法可以做到這一點?

這是 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")

這是一個使用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

您可以使用計數和替換字符串函數來實現:

import queue
word = "reindeer" 
given_string = "ierndeBeCrerindAeer"
new_string = ""
counter = 0
tmp = ""
letters = queue.Queue()



for i in given_string:
    if not i in word:
        new_string += i
    else:
        letters.put(i)


x = 0
while x < len(word):
    while not letters.empty():
        j = letters.get()
        if j == word[x]:
            tmp += j
            # print(tmp)
            break
        else:
            letters.put(j)
    x = x +1
    if tmp == word:
        counter += 1
        tmp = ""
        x = 0
print(f"The word {word} occurs {counter} times in the string {given_string}.")
print("The left over word is",new_string)

輸出將是:

The word reindeer occurs 2 times in the string ierndeBeCrerindAeer.
The left over word is BCA

在這里使用隊列很容易,這樣我們就不會重復已經存在或找到的元素。 希望這能回答您的問題,謝謝!

暫無
暫無

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

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