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
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP