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

C++에서 정확히 k개의 고유한 문자가 있는 하위 문자열 수 계산

<시간/>

소문자 알파벳만 포함하고 정수 값 k를 포함하는 문자열 str[]이 제공됩니다. 목표는 정확히 k개의 고유한 요소를 가진 str의 가능한 부분 문자열의 수를 찾는 것입니다.

예를 들어

입력

str= ”pqr” k=2

출력

Count of number of substrings with exactly k distinct characters are: 2

설명

The substrings having exactly 2 distinct elements are: “pq”, “qr”.

입력

str= ”stristr” k=4

출력

Count of number of substrings with exactly k distinct characters are: 10

설명

The substrings having exactly 2 distinct elements are:
“stri”, “tris”, “rist”, “istr”, “stris”, “trist”, “ristr”, “strist”, “tristr”, “stristr”.

아래 프로그램에서 사용된 접근 방식은 다음과 같습니다. -

이 접근 방식에서 우리는 string str 안에 영어 알파벳의 빈도를 저장하기 위해 array array[26]을 만들 것입니다. 이제 두 개의 for 루프를 사용하여 str을 순회합니다. 하위 문자열의 경우 각 문자가 한 번 발생한 다음 고유 문자의 개수를 증가시키고, 해당 개수가 k와 같으면 해당 하위 문자열의 끝에서 지정된 조건에 따라 하위 문자열의 개수를 증가시킵니다.

  • 문자열 str을 입력으로 사용합니다.

  • 양수 값을 갖는 정수 k를 취하십시오.

  • 함수 substring_k(string str, int length, int k)는 str과 k를 취하고 정확히 k개의 고유한 문자가 있는 부분 문자열의 수를 반환합니다.

  • 초기 카운트를 0으로 합니다.

  • 주파수 배열 배열[26]을 가져옵니다.

  • i=0에서 i까지 두 개의 for 루프를 사용하여 str을 탐색합니다.

  • temp를 하위 문자열 str[i to j]의 고유 요소 수로 취합니다.

  • array[str[j] − 'a']==0이면 이 문자 str[j]가 이 하위 문자열에서 처음 발생했습니다. 따라서 온도를 높이십시오.

  • 이제 array[str[j] − 'a']++를 사용하여 현재 문자의 개수를 증가시킵니다.

  • temp가 k와 같으면 카운트를 증가시킵니다.

  • 온도가 k보다 높으면 더 이상 통근을 중지하고 루프를 끊습니다.

  • 모든 루프가 끝나면 결과로 count를 반환합니다.

예시

#include<bits/stdc++.h>
using namespace std;
int substring_k(string str, int length, int k){
   int count = 0;
   int array[26];
   for (int i = 0; i < length; i++){
      int temp = 0;
      memset(array, 0, sizeof(array));
      for (int j = i; j < length; j++){
         if(array[str[j] − 'a'] == 0){
            temp++;
         }
         array[str[j] − 'a']++;
         if (temp == k){
            count++;
         }
         if(temp > k){
            break;
         }
      }
   }
   return count;
}
int main(){
   string str = "abc";
   int length = str.length();
   int k = 1;
   cout<<"Count of number of substrings with exactly k distinct characters are: "<<substring_k(str, length, k);
   return 0;
}

출력

위의 코드를 실행하면 다음과 같은 출력이 생성됩니다 -

Count of number of substrings with exactly k distinct characters are: 3