在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-开始并检查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

猜你喜欢