0, 1, 2만 포함하는 문자열 str이 제공됩니다. 목표는 0의 1과 2의 수가 같은 str의 모든 부분 문자열을 찾는 것입니다. str이 "12012"인 경우. 0, 1, 2가 같은 부분 문자열은 "120", "201" 및 "012"가 됩니다. 개수는 3입니다.
예를 들어 이해합시다.
입력 − str="112200120"
출력 − 0, 1, 2의 수가 같은 부분 문자열의 개수는 − 5입니다.
설명 − 하위 문자열은 다음과 같습니다.
str[0-5]=”112200”, str[1-6]=”122001”, str[5-7]=”012”, str[6-8]=”120”, str[7-0]=”201”
입력 − str="12012"
출력 −0, 1, 2의 수가 같은 부분 문자열의 개수는 다음과 같습니다. 3
설명 − 하위 문자열은 −
str[0-2]=”120” , str[1-3]=”201”, str[2-4]=”012”
아래 프로그램에서 사용한 접근 방식은 다음과 같습니다.
-
정수 값의 문자열을 가져와 문자열의 길이를 계산합니다.
-
추가 처리를 위해 데이터를 함수에 전달합니다.
-
임시 변수 count를 사용하여 0, 1, 2의 수가 같은 부분 문자열의 수를 저장합니다.
-
쌍을 주어진 숫자의 빈도로 매핑하는 유형 맵의 변수를 만듭니다.
-
쌍(0,0)에 1을 저장하고 0에서 문자열 길이까지 FOR 루프를 시작합니다.
-
루프 내에서 IF str[i] =0을 확인한 다음 0에 대한 카운트를 증가시키고 ELSE IF str[i] =1을 선택한 다음 1에 대한 카운트를 증가시키고 ELSE는 2에 대한 카운트를 증가시킵니다.
-
0과 1을 0 - 1로 설정하고 0과 2를 0 - 2로 설정합니다.
-
zero_one과 zero_two를 쌍으로 만들어 count + map_pair의 차이 값으로 설정하고 쌍을 만들어 계산합니다.
-
map_pair를 1만큼 증가시킵니다.
-
반품 횟수
-
결과를 인쇄하십시오.
예시
#include <bits/stdc++.h> using namespace std; int count_string(string str_1, int length_str1, string str_2, int length_str2){ int count = INT_MAX; int arr_1[26] = { 0 }; int arr_2[26] = { 0 }; for (int i = 0; i < length_str1; i++){ arr_1[str_1[i] - 'a']++; } for (int i = 0; i < length_str2; i++){ arr_2[str_2[i] - 'a']++; } int alphabets = 26; for (int i = 0; i < alphabets; i++){ if(arr_2[i]){ count = min(count, arr_1[i] / arr_2[i]); } } return count; } int main(){ string str_1 = "knowledge", str_2 = "know"; int length_str1 = str_1.size(); int length_str2 = str_2.size(); cout<<"Count occurrences of a string that can be constructed from another given string are: "<<count_string(str_1,length_str1, str_2, length_str2); return 0; }
출력
위의 코드를 실행하면 다음 출력이 생성됩니다 -
Count of Substrings with equal number of 0s, 1s and 2s are: 1