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
廣告
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP