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

จำนวนครั้งของรูปแบบ “1(0+)1” ในสตริงใน C++


เราได้รับสตริง str ที่มี 0s,1s และตัวอักษรอื่นๆ นอกจากนี้ยังมีรูปแบบของรูปแบบ “1(0+)1” โดยที่ 0+ หมายถึงตัวเลขใดๆ (>0) ของ 0 ที่เรียงต่อกัน เป้าหมายคือการหารูปแบบดังกล่าว ( “1(0+)1”) ภายในสตริง str.

ให้เราเข้าใจด้วยตัวอย่าง

ป้อนข้อมูล − str =“abb010bb10111011”

ผลผลิต − จำนวนครั้งของรูปแบบ “1(0+)1” ในสตริงคือ − 2

คำอธิบาย − เน้นรูปแบบภายใน str:“abb010bb10111011”, “abb010bb10111011”

ป้อนข้อมูล − str =“01001011001001100”

ผลผลิต − จำนวนครั้งของรูปแบบ “1(0+)1” ในสตริงคือ − 4

คำอธิบาย − เน้นรูปแบบภายใน str:“01001011001001100”, “01001011001001100”, “01001011001001100”, “01001011001001100”

แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้

จะเห็นได้ว่ารูปแบบทั้งหมดเริ่มต้นและลงท้ายด้วย 1 เราจะทำเครื่องหมายที่ 1 แรกโดยใช้ตัวแปรแฟล็ก check=1 และข้าม 0 ทั้งหมด

สำหรับอักขระอื่น ๆ (ไม่ใช่ 0 หรือ 1 ) ให้ตั้งค่าเป็น 0

หากเราพบอีก 1 และแฟล็กตรวจสอบเป็น 1 ให้ดูว่าค่าก่อนหน้าเป็น 0 หรือไม่ ถ้าใช่ การเพิ่มขึ้นนับเป็น 0 ก่อนหน้านั้นอยู่ระหว่างสองค่า สำหรับค่าใด ๆ ที่ไม่ใช่ 0 หรือ 1 ชุด ให้ตรวจสอบอีกครั้งเป็น 0

  • รับสตริงอินพุตเป็น str.

  • ฟังก์ชัน Pattern_occurrences(string str, int length) ใช้สตริงและความยาวและส่งกลับจำนวนการเกิดขึ้นของรูปแบบ “1(0+)1” ในสตริง

  • นับเริ่มต้นเป็น 0

  • เริ่มต้นตรวจสอบตัวแปรแฟล็กเป็น 0

  • Traverse str ใช้ for loop จาก index i=0 ถึง i

  • หากอักขระปัจจุบัน str[i] คือ 1 และเครื่องหมายถูก 0 ให้ตั้งค่าเป็น 1 และดำเนินการต่อ

  • หากอักขระปัจจุบัน str[i] คือ 1 และกาเครื่องหมายคือ 1 แสดงว่าเป็นอักขระที่สองที่ 1 ตรวจสอบว่าค่าก่อนหน้า str[i-1] เป็น 0 หากใช่ แสดงว่าพบรูปแบบ จำนวนที่เพิ่มขึ้น

  • หากอักขระปัจจุบันไม่ใช่ 0 หรือ 1 อักขระนั้นจะไม่เป็นส่วนหนึ่งของรูปแบบ กำหนดกาเครื่องหมายเป็น 0 ตอนนี้พบครั้งต่อไป 1 จะถือเป็นจุดเริ่มต้นของรูปแบบถัดไป (ถ้ามี)

  • ในตอนท้ายจะมีรูปแบบดังกล่าวจำนวนหนึ่งอยู่ภายใน str.

  • ผลตอบแทนนับเป็นผลลัพธ์

ตัวอย่าง

#include<iostream>
using namespace std;
int Pattern_occurrences(string str, int length){
   int count = 0;
   bool check = 0;
   for (int i = 0; i < length ; i++){
      if (str[i] == '1' && check == 1){
         if (str[i - 1] == '0'){
            count++;
         }
      }
      if (str[i] == '1' && check == 0){
         check = 1;
         continue;
      }
      if (str[i] != '0' && str[i] != '1'){
         check = 0;
      }
   }
   return count;
}
int main(){
   string str = "01010111011";
   int length = str.length();
   cout<<"Count of occurrences of a “1(0+)1” pattern in a string are: "<< Pattern_occurrences(str, length);
   return 0;
}

ผลลัพธ์

หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -

Count of occurrences of a “1(0+)1” pattern in a string are: 3