Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 0, 1, 2의 수가 같은 부분 문자열 계산

<시간/>

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