在C ++中与其他二进制字符串进行XOR运算的循环置换计数
我们给了两个二进制字符串,假设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-开始并检查IFarr[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