檢查二進位制字串是否包含 A 對 0 和 B 個獨立的 0


檢查二進位制字串是否包含 A 對 0 和 B 個獨立的 0 是計算機科學中常見的問題,尤其是在演算法和資料結構領域。問題陳述非常簡單,並在密碼學、網路安全和機器學習等各個領域發揮著重要作用。

在本教程中,我們將討論使用 C++ 解決此問題的方法。我們將首先概述該方法,從定義問題陳述並提供一些示例開始,然後深入探討實現細節。所以讓我們開始吧!

問題陳述

給定一個長度為 n 的二進位制字串,由 0 和 1 組成,我們需要確定它是否包含 A 對相鄰的 0 (00) 和 B 個獨立的 0 (不與其他 0 相鄰的 0)。

示例

示例 1

Input:
s = "100101000"
A = 2
B = 1
Output:
Yes

說明:在輸入字串中,有兩對相鄰的 0:“10|010|1000”。此外,還有一個獨立的 0:“100|1|01000”。因此,輸出為“Yes”,因為輸入字串包含兩對相鄰的 0 和一個獨立的 0。

示例 2

Input:
s = "110010010"
A = 3
B = 2
Output:
No

說明:在輸入字串中,有三對相鄰的 0:“1|100|100|10”。但是,只有兩個獨立的 0:“1100|1|0010”。因此,輸出為“No”,因為輸入字串不包含兩個獨立的 0。

演算法

  • 將 pairs 和 singles 計數器初始化為零。

  • 使用迴圈遍歷輸入字串 s,索引 i 從 0 到 n-2。

  • 檢查當前字元和下一個字元是否均為 '0'。

    • 如果是,則將 pairs 加 1,並透過將 i 加 1 跳過下一個字元。

  • 否則,檢查當前字元是否為 '0' 且下一個字元是否為 '1'。

    • 如果是,則將 singles 加 1。

  • 檢查 s 的最後一個字元是否為 '0'。

    • 如果是,則將 singles 加 1。

  • 如果 pairs 的數量大於或等於 A 且 singles 的數量大於或等於 B,則返回 true,否則返回 false。

示例

使用 C++ 實現上述演算法

在此實現中,我們定義了一個名為 'contains_zeros' 的函式,它接收一個二進位制字串 's' 和兩個整數 'A' 和 'B' 作為輸入。如果字串包含至少 'A' 對相鄰的零和 'B' 個獨立的零,則該函式返回 'true';否則,它返回 'false'。

為了確定字串中 pairs 和 independent zeros 的數量,我們遍歷字串並跟蹤遇到的 pairs 和 independent zeros 的數量。如果我們找到一對相鄰的零,則跳過下一個字元。在迴圈結束時,我們檢查最後一個字元是否為零,並相應地增加 independent zeros 的計數。

最後,在 'main' 函式中,我們使用輸入字串 's' 和 'A' 和 'B' 的值呼叫 'contains_zeros'。如果函式返回 'true',則列印“Yes”,否則列印“No”。

#include <iostream>
#include <string>
using namespace std;
bool contains_zeros(string s, int A, int B) {
    int n = s.size();
    int pairs = 0;
    int singles = 0;
    for (int i = 0; i < n - 1; i++) {
        if (s[i] == '0' && s[i+1] == '0') {
            pairs++;
            i++; // Skip the next character
        } else if (s[i] == '0' && s[i+1] == '1') {
            singles++;
        }
    }
    if (s[n-1] == '0') {
        singles++;
    }
    return pairs >= A && singles >= B;
}
int main() {
    string s = "100101000";
    int A = 2;
    int B = 1;
    bool result = contains_zeros(s, A, B);
    cout << "Input:" << endl;
    cout << "s = \"" << s << "\"" << endl;
    cout << "A = " << A << endl;
    cout << "B = " << B << endl;
    cout << endl;
    cout << "Output:" << endl;
    if (result) {
        cout << "Yes" << endl;
    } else {
        cout << "No" << endl;
    }
    return 0;
}

輸出

執行上述 C++ 程式將產生以下輸出

Input:
s = "100101000"
A = 2
B = 1

Output:
Yes

結論

總之,我們討論瞭如何使用 C++ 程式檢查二進位制字串是否包含給定數量的 0 對和獨立的 0。我們提供了一個演算法並實現了一個函式,該函式以字串 's' 和兩個整數 'A' 和 'B' 作為輸入,並返回一個布林值,指示 's' 是否包含至少 'A' 對 0 和 'B' 個獨立的 0。

該演算法的時間複雜度為 O(n),其中 n 是輸入字串 's' 的長度,因為我們需要遍歷 's' 一次以計算 pairs 和 singles 的數量。

更新於: 2023-09-08

91 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.