1과 0의 조합을 포함하는 str_1과 str_2라는 두 개의 이진 문자열이 주어지고 작업은 먼저 문자열 str_1에서 가능한 다른 순열의 "SET"이라고 가정해 봅시다. 이진 문자열 str_2로 집합의 요소를 찾은 다음 XOR이 0을 반환하는지 여부를 확인합니다. 그렇다면 그 경우를 고려하고 무시하십시오.
예를 들어 이해합시다.
예를 들어
입력 - 문자열 str_1 ="1111", 문자열 str_2 ="1111"
출력 - 다른 이진 문자열이 0인 XOR이 있는 순환 순열의 수는 다음과 같습니다. 4
설명 - 문자열 str_2를 사용하여 집합을 만들고 집합은 {1111}이 됩니다. 이제 문자열 str_1을 사용하여 XOR 연산을 수행하고 {1111} ^ "1111" =0으로 설정합니다. 문자열 str_2에 4개의 유사한 요소가 있으므로 4개의 다른 순열을 형성할 수 있으므로 출력은 4입니다.
입력 - 문자열 str_1 ="1101", 문자열 str_2 ="1101"
출력 - 다른 이진 문자열이 0인 XOR이 있는 순환 순열의 수는 다음과 같습니다. 1
설명 - 문자열 str_2를 사용하여 집합을 생성하고 집합은 {1101, 1110, 1011, 0111}이 됩니다. 이제 우리는 문자열 str_1을 사용하여 XOR 연산을 수행하고 형식화된 설정 즉,
^ 1101 =0
{1110} ^ 1101 0이 아님
^ 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()를 호출합니다.
- 함수 내부
- 두 개의 변수 시작과 끝을 선언하고 0으로 설정
- 문자열의 길이를 계산합니다.
- i에서 문자열 -1의 길이까지 FOR 루프를 시작하고 IF i가 end보다 큰지 확인한 다음 start를 i로 설정하고 end를 i로 설정합니다. 이제 시작하는 동안 end는 string의 길이보다 작고 str[end-start]는 str[end]와 같고 end의 값을 1만큼 증가
- 이제 arr[i]를 끝으로 설정 - 시작하고 끝을 1씩 감소
- 또는 임시 변수 temp를 생성하여 i - start로 설정하고 IF arr[temp]가 end - i + 1보다 작은지 확인한 다음 arr[i]를 arr[temp]로 설정합니다. 그렇지 않으면 시작을 i로 설정하고 시작 WHILE 끝이 문자열 길이보다 짧고 str[end-start]를 str[end]로 지정한 다음 끝을 1씩 증가시키고 arr[i]를 끝으로 설정 - 시작하고 끝을 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