Python - N個重複K個字元的非重疊出現


本文將使用Python查詢N個重複K個字元的非重疊出現。在使用Python處理字串時,這類問題非常常見。

理解問題

問題在於查詢N個重複K個字元的非重疊出現。簡單來說,我們會得到一個字串,在這個字串中會有一些重複的字元,所以我們必須找出特定字元的出現次數並顯示其計數。這裡N是給定輸入字串中的任何字元,K是字元N的計數。

上述問題的邏輯

為了解決這個問題,我們將使用迴圈遍歷給定的字串,然後檢查N和K的值。並檢查包含N(K次)的子字串。並使用物件來儲存這些出現的計數。

演算法

  • 步驟1 - 首先定義一個名為non_overlapping()的函式,在這個函式中,我們將傳遞三個引數n、k和the_str。這裡n是字元,k是n的字元計數,the_str是輸入字串

  • 步驟2 - 初始化一個名為result的變數,該變數將用於跟蹤非重疊出現的計數。

  • 步驟3 - 接下來,我們將使用分隔符'B'分割給定的字串the_str。這將建立一個子字串列表。

  • 步驟4 - 將在一個迴圈中遍歷列表中的每個子字串。

  • 步驟5 - 對於每個子字串,我們將使用lambda函式中的filter函式過濾字元N的出現。這裡lambda函式將用於檢查每個字元是否等於K。

  • 步驟6 - 現在將過濾後的結果轉換為列表,然後計算長度。

  • 步驟7 - 然後,我們將長度除以K以檢查當前子字串中非重疊出現的次數。

  • 步驟8 - 之後,將count的值新增到result變數中。

  • 步驟9 - 當迭代過程結束時,非重疊出現的最終計數將儲存在result變數中。

示例

# Define the function
def non_overlapping(n, k, the_str):
   # Initialize the result object
   result = 0
   # Traverse the string
   for sub in the_str.split('B'):
      result += len(list(filter(lambda x: x == k, sub))) // n
   return result

the_str = 'AABBCCDDAABBGGHH'
K = "A"
N = 2  
print("The Input String is : " + str(the_str))
Output = non_overlapping(N, K, the_str)
print("Non-Overlapping occurrences result : " + str(Output))

輸出

The Input String is : AABBCCDDAABBGGHH
Non-Overlapping occurrences result : 2

複雜度

查詢N個重複K個字元的非重疊出現的的時間複雜度為O(m),這裡m是給定輸入字串的長度。對於每次迭代,我們都過濾了字元A的出現次數,並計算了A出現K=2次的次數。

結論

我們已經使用Python實現了查詢N個重複K個字元的非重疊出現的解決方案。我們使用了一種非常直接的方法來解決這個問題,時間複雜度為O(m)。

更新於:2023年10月17日

68 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始
廣告