檢查Python字串中所有字元是否具有相同的頻率,允許一個字元頻率不同


假設我們有一個小寫字串s,我們必須檢查是否可以透過刪除最多一個字元將其轉換為有效字串。這裡的有效字串是指一個字串str,其中str中所有唯一字元的每個字元的頻率都相同。

因此,如果輸入類似於s = "xyyzx",則輸出為True,因為我們可以刪除z,則字串將變為"xyyx",其中x和y的出現次數相同。

為了解決這個問題,我們將遵循以下步驟:

  • size := 26
  • occurrence := 一個大小為26的陣列。這儲存了s中每個字元的頻率
  • occr1 := 0
  • occr1_cnt := 0
  • 對於i從0到size - 1,執行:
    • 如果occurrence[i]不為0,則:
      • occr1 := occurrence[i]
      • occr1_cnt := 1
      • 退出迴圈
  • occr2 := 0
  • occr2_cnt := 0
  • 對於j從i+1到size - 1,執行:
    • 如果occurrence[j]不為0,則:
      • 如果occurrence[j]等於occr1,則:
        • occr1_cnt := occr1_cnt + 1
      • 否則:
        • occr2_cnt := 1
        • occr := occurrence[j]
        • 退出迴圈
  • 對於k從j+1到size - 1,執行:
    • 如果occurrence[k]不為0,則:
      • 如果occurrence[k]等於occr1,則:
        • occr1_cnt := occr1_cnt + 1
      • 如果occurrence[k]等於occr2,則:
        • occr2_cnt := occr2_cnt + 1
      • 否則:
        • 返回False
    • 如果occr1_cnt > 1且occr2_cnt > 1,則:
      • 返回False
  • 返回True

讓我們看看下面的實現,以便更好地理解:

示例

線上演示

size = 26
def solve(str):
   occurrence = [0]*size
   for i in range(len(str)): occurrence[ord(str[i])-ord('a')] += 1
      occr1 = 0
      occr1_cnt = 0
      for i in range(size):
         if (occurrence[i] != 0):
            occr1 = occurrence[i]
            occr1_cnt = 1
            break
   occr2 = 0
   occr2_cnt = 0
   for j in range(i+1,size):
      if (occurrence[j] != 0):
         if (occurrence[j] == occr1):
            occr1_cnt += 1
         else:
            occr2_cnt = 1
            occr = occurrence[j]
            break
   for k in range(j+1,size):
      if occurrence[k] != 0:
         if (occurrence[k] == occr1):
            occr1_cnt += 1
      if (occurrence[k] == occr2):
         occr2_cnt += 1
      else:
         return False
      if occr1_cnt > 1 and occr2_cnt > 1:
         return False
   return True
s = "xyyzx"
print(solve(s))

輸入

"xyyzx"

輸出

True

更新於:2020-12-29

143 次檢視

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.