我们给了两个二进制字符串,假设str_1和str_2包含1和0的组合,任务是首先形成一个集合,比如说说与字符串str_1可能具有不同排列的“ SET”,然后我们将对字符串进行XOR操作。与二进制字符串str_2一起设置的元素,然后检查XOR是否返回0。如果是,则考虑这种情况,否则将其忽略。
例如
输入- 字符串str_1 =“ 1111”,字符串str_2 =“ 1111”
输出- 与其他二进制字符串为X的XOR循环置换的计数为:4
说明-我们将使用字符串str_2创建集合,集合将为{1111}。现在,我们将使用字符串str_1进行XOR操作,并将其设置为{1111} ^“ 1111” =0。由于字符串str_2中有4个相似的元素,因此我们可以形成4个不同的排列,因此输出为4。
输入- 字符串str_1 =“ 1101”,字符串str_2 =“ 1101”
输出- 与其他二进制字符串为X的XOR循环置换的计数为:1
说明-我们将使用字符串str_2创建集合,集合将为{1101,1110,1011,0111}。现在,我们将使用字符串str_1进行XOR操作并进行设置,即
{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_ -1)。2.size()
创建一个字符串类型的变量str并将其设置为str_1和str_2的组合,然后计算字符串str的长度。创建一个字符串长度为str的数组。
check()通过将字符串str和数组作为参数传递给函数来调用函数。
内部功能
声明两个变量start和end并将它们设置为0
计算字符串的长度。
从i开始循环FOR,直到字符串-1的长度为止,并检查i是否大于end,然后将start设置为i并将end设置为i。现在开始,而end小于字符串的长度,并且str [end-start]等于str [end],并将end的值增加1
现在将arr [i]设置为end-开始并将末尾递减1
否则,创建一个临时变量temp并将其设置为i-开始并检查IF arr [temp]小于end-i + 1,然后将arr [i]设置为arr [temp]。否则,将start设置为i,并以小于字符串长度的结尾开始,并将str [end-start]设置为str [end],然后将end递增1,并将arr [i]设置为end-start并将end递减1 。
从i到1开始循环,直到字符串str -1的长度,然后检查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 << "与其他二进制字符串进行XOR运算的循环置换计数为: " << cyclic_permutation(str_1, str_2);
return 0;
}如果我们运行上面的代码,它将生成以下输出-
输出结果
与其他二进制字符串进行XOR运算的循环置换计数为: 4