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

ตรวจสอบสตริงไบนารีว่ามี 1 ติดกัน 2 ตัวทุกที่ใน C++


นี่คือโจทย์ที่น่าสนใจ เราต้องเขียนโค้ดที่รับสตริงซึ่งต้องผ่านเกณฑ์ดังนี้

  • ทุกกลุ่มของ 1 ที่ติดกัน ต้องมีความยาวเท่ากับ 2 เท่านั้น
  • ทุกกลุ่มของ 1 ที่ติดกัน ต้องปรากฏหลัง 0 อย่างน้อย 1 ตัว

เช่น สตริง 0110 ถือว่าถูกต้อง แต่ 001110 และ 010 ไม่ถูกต้อง

วิธีแก้ไขคือ หาตำแหน่งของ 1 และตรวจสอบว่ามันเป็นส่วนหนึ่งของซับสตริง 011 หรือไม่ หากเงื่อนไขล้มเหลวที่ซับสตริงใด ให้คืนค่า false มิฉะนั้น true

ตัวอย่าง

#include <bits/stdc++.h> using namespace std; bool isValidStr(string str) {   int n = str.length();   int index = find(str.begin(), str.end(), '1') - str.begin();   if (index == 0) // ถ้าสตริงเริ่มด้วย 1 ให้คืนค่า false   return false;   while (index <= n - 1) {     if (str[index - 1] != '0') // ถ้า 1 ไม่อยู่หลัง 0     return false;     if (index + 1 < n && str[index + 1] != '1') // ถ้า 1 ไม่ได้ตามด้วย 1 อีกตัว     return false;     if (index + 2 < n && str[index + 2] == '1') // ถ้าซับสตริงเป็นแบบ "0111"     return false;     if (index == n - 1) // ถ้าสตริงจบด้วย 1 เดียว     return false;     index = find(str.begin() + index + 2, str.end(), '1') - str.begin();   }   return true; } int main() {   string str = "011000110110";   if(isValidStr(str)){     cout << str << " is a valid string";   } else {     cout << str << " is NOT a valid string";   } }

ผลลัพธ์

011000110110 is a valid string