C++ 中計算與其他二進位制字串異或結果為 0 的迴圈排列的數量
我們給出兩個二進位制字串,假設為 str_1 和 str_2,它們包含 1 和 0 的組合。任務是首先形成一個集合,假設為“SET”,該集合包含字串 str_1 的所有不同排列,然後我們將集合中的元素與二進位制字串 str_2 執行異或運算,然後檢查異或結果是否為 0。如果是,則考慮這種情況,否則忽略它。
讓我們透過例子來理解。
例如
輸入 - 字串 str_1 = "1111",字串 str_2 = "1111"
輸出 - 與其他二進位制字串異或結果為 0 的迴圈排列的數量為:4
解釋 - 我們將使用字串 str_2 建立集合,集合將為 {1111}。現在,我們將使用字串 str_1 和形成的集合執行異或運算,即 {1111} ^ “1111” = 0。由於字串 str_2 中有 4 個相同的元素,因此我們可以形成 4 個不同的排列,因此輸出為 4。
輸入 - 字串 str_1 = "1101",字串 str_2 = "1101"
輸出 - 與其他二進位制字串異或結果為 0 的迴圈排列的數量為:1
解釋 - 我們將使用字串 str_2 建立集合,集合將為 {1101, 1110, 1011, 0111}。現在,我們將使用字串 str_1 和形成的集合執行異或運算,即
{1101} ^ 1101 = 0
{1110} ^ 1101 不等於 0
{1011} ^ 1101 不等於 0
{0111} ^ 1101 不等於 0
如我們所見,我們只得到一個 0,因此計數為 1。
下面程式中使用的方法如下
- 輸入兩個二進位制字串,假設為 str_1 和 str_2,並將它們傳遞給函式 cyclic_permutation() 以進行進一步處理。
- 建立一個臨時變數來儲存結果,並將 str_2 設定為 str_2 + str_2,然後將 str_2 設定為 str_2.substr(0, str_2.size()-1)。
- 建立一個字串型別變數 str 並將其設定為 str_1 和 str_2 的組合,然後計算字串 str 的長度。建立一個與字串 str 長度相同的陣列。
- 呼叫函式 check(),並將字串 str 和陣列作為引數傳遞給函式。
- 在函式內部
- 宣告兩個變數 start 和 end 並將其設定為 0
- 計算字串的長度。
- 從 i 到字串長度 -1 開始 FOR 迴圈,並檢查 IF i 大於 end,則將 start 設定為 i,將 end 設定為 i。現在開始 While end 小於字串長度 AND str[end-start] 等於 str[end] 並將 end 的值加 1
- 現在將 arr[i] 設定為 end - start 並將 end 減 1
- 否則,建立一個臨時變數 temp 並將其設定為 i - start,並檢查 IF arr[temp] 小於 end - i + 1,則將 arr[i] 設定為 arr[temp]。否則,將 start 設定為 i 並開始 WHILE end 小於字串長度 AND str[end-start] 為 str[end],然後將 end 加 1 並將 arr[i] 設定為 end - start 並將 end 減 1。
- 從 i 到 1 開始 FOR 迴圈,直到字串 str 長度 -1,並檢查 IF arr[i] 等於字串 str_1 的長度,則將計數加 1
- 返回計數
- 列印結果
示例
#include <bits/stdc++.h> using namespace std; void check(string str, int arr[]) { int start = 0, end = 0; int len = str.length(); for (int i = 1; i <= len - 1; i++) { if (i > end) { start = i; end = i; while (end < len && str[end - start] == str[end]) { end++; } arr[i] = end - start; end--; } else { int temp = i - start; if (arr[temp] < end - i + 1) { arr[i] = arr[temp]; } else { start = i; while (end < len && str[end - start] == str[end]) { end++; } arr[i] = end - start; end--; } } } } int cyclic_permutation(string str_1, string str_2) { int count = 0; str_2 = str_2 + str_2; str_2 = str_2.substr(0, str_2.size() - 1); string str = str_1 + "$" + str_2; int len = str.length(); int arr[len]; check(str, arr); for (int i = 1; i <= len - 1; i++) { if (arr[i] == str_1.length()) { count++; } } return count; } int main() { string str_1 = "1111"; string str_2 = "1111"; cout << "Count of cyclic permutations having XOR with other binary string as 0 are: " << cyclic_permutation(str_1, str_2); return 0; }
如果我們執行以上程式碼,它將生成以下輸出:
輸出
Count of cyclic permutations having XOR with other binary string as 0 are: 4
廣告