สมมติว่าเรามีสตริงไบนารี s ให้เราพิจารณาการดำเนินการที่เราสามารถพลิกหนึ่งบิต สตริง s เรียกว่า สตริงสลับ หากไม่มีอักขระที่อยู่ติดกันสองตัวที่เหมือนกัน เราต้องหาจำนวนขั้นต่ำของการดำเนินการที่จำเป็นในการสลับกัน
ดังนั้น หากอินพุตเป็น s ="11100011" เอาต์พุตจะเป็น 3 เพราะหากเราพลิกบิตที่ตำแหน่ง 1, 4 และ 7 มันจะเป็น "10101010" ทั้งหมดก็จะสลับกัน
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
เปลี่ยน :=0
-
even_1 :=0, even_0 :=0
-
odd_1 :=0, odd_0 :=0
-
สำหรับฉันในช่วง 0 ถึงขนาด s - 1 ทำ
-
ถ้าฉันเท่ากันแล้ว
-
ถ้า s[i] เหมือนกับ '1' แล้ว
-
even_1 :=คู่ _1 + 1
-
-
มิฉะนั้น
-
even_0 :=คู่ _0 + 1
-
-
-
มิฉะนั้น
-
ถ้า s[i] เหมือนกับ '1' แล้ว
-
odd_1 :=odd_1 + 1
-
-
มิฉะนั้น
-
คี่_0 :=คี่_0 + 1
-
-
-
-
if (even_1+odd_0)> (even_0+odd_1) แล้ว
-
เปลี่ยน :=คู่ _0 + คี่_1
-
-
มิฉะนั้น
-
เปลี่ยน :=คู่ _1 + คี่_0
-
-
ผลตอบแทนการเปลี่ยนแปลง
ตัวอย่าง (Python)
ให้เราดูการใช้งานต่อไปนี้เพื่อทำความเข้าใจ &minnus;
def solve(s): change = 0 even_1 = 0 even_0 = 0 odd_1 = 0 odd_0 = 0 for i in range(len(s)): if(i%2 == 0): if(s[i]=='1'): even_1 +=1 else: even_0 +=1 else: if(s[i] == '1'): odd_1 +=1 else: odd_0 +=1 if((even_1+odd_0)>(even_0+odd_1)): change = even_0 + odd_1 else: change = even_1 + odd_0 return change s = "11100011" print(solve(s))
อินพุต
"11100011"
ผลลัพธ์
3