Python程式:在給定字串中用最少交換次數將1分組


假設我們給定一個包含0和1的二進位制字串input_str。我們的任務是透過交換給定字串中的1來分組0和1。我們必須執行最少的交換操作,並返回該值。需要注意的是,我們只能交換相鄰的值。

因此,如果輸入類似於input_str = 10110101,則輸出將為4

交換將如下所示:

10110101->01110101->01111001->01111010->01111100

交換總數:4。

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

  • one := 一個新列表,包含input_str中1的位置
  • mid := one大小的向下取整值
  • res := 0
  • 對於範圍0到one大小的i,執行:
    • res := res + |one[mid] - one[i]| - |mid - i|
  • 如果 res < 0,則
    • 返回 0
  • 否則,
    • 返回 res

示例

讓我們看下面的實現來更好地理解:

def solve(input_string):
   one = [i for i in range(len(input_string)) if input_string[i] == "1"]
   mid = len(one) // 2
   res = 0
   for i in range(len(one)):
      res += abs(one[mid] - one[i]) - abs(mid - i)
   return 0 if res < 0 else res

print(solve('10110101'))

輸入

'10110101'

輸出

4

更新於:2021年10月16日

260 次瀏覽

開啟你的職業生涯

完成課程獲得認證

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