Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

พลิกสตริงเป็นเสียงเดียวที่เพิ่มขึ้นใน C ++


สมมติว่ามีการกำหนดสตริงของ '0' และ '1' สตริงนั้นจะเพิ่มขึ้นแบบโมโนโทนิกหากประกอบด้วยจำนวน '0' (อาจเป็น 0) ตามด้วยจำนวน '1' (อาจเป็น 0 ด้วย) เรามีสตริง S ของ '0' และ '1' และเราอาจพลิก '0' เป็น '1' หรือ '1' เป็น '0' ค้นหาจำนวนการพลิกขั้นต่ำเพื่อให้ S เสียงเดียวเพิ่มขึ้น ดังนั้นหากอินพุตเป็น "010110" เอาต์พุตจะเป็น 2 เมื่อพลิกเราจะได้ "011111" หรือ "000111"

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • n :=ขนาดของ S ตั้งค่า flipCount :=0, oneCount :=0

  • สำหรับฉันอยู่ในช่วง 0 ถึง n – 1

    • ถ้า S[i] เป็น 0 แล้ว

      • ถ้า oneCount =0 ให้ข้ามไปที่การวนซ้ำถัดไป

      • เพิ่ม flipCount ขึ้น 1

    • มิเช่นนั้นให้เพิ่ม oneCount ขึ้น 1

    • ถ้า oneCount

  • ส่งคืน flipCount

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int minFlipsMonoIncr(string S) {
      int n = S.size();
      int flipCount = 0;
      int oneCount = 0;
      for(int i = 0; i < n; i++){
         if(S[i] == '0'){
            if(oneCount == 0) continue;
            flipCount++;
         } else oneCount++;
            if(oneCount < flipCount) flipCount = oneCount;
      }
      return flipCount;
   }
};
main(){
   Solution ob;
   cout << (ob.minFlipsMonoIncr("010110"));
}

อินพุต

"010110"

ผลลัพธ์

2