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

C++에서 각 문자를 최대 한 번 사용하여 다른 문자열에서 구성할 수 있는 문자열의 수

<시간/>

str1과 str2라는 두 개의 문자열이 주어지고 다른 문자열에서 완전히 생성될 수 있는 문자열의 수를 계산하는 것이 작업이지만 문자열을 구성하는 데 한 문자를 한 번 사용할 수 있습니다. 마찬가지로 str1과 str2 두 개의 문자열을 가져와 str1의 문자를 정확히 한 번만 사용하여 str1에서 str2가 발생하는지 확인합니다.

입력 − str_1 ="기술적 학습", str_2 ="학습"

출력 − 각 문자를 최대 한 번 사용하여 다른 문자열에서 구성할 수 있는 문자열의 수는 − 1

설명 - 우리가 볼 수 있듯이 str_2는 str_1에서 정확히 한 번 발생합니다. 따라서 str_2에 있는 str_1의 개수는 1입니다.

입력 - str_1 ="ellohsehelloabcoelhl, str_2 ="안녕하세요"

출력 − 각 문자를 최대 한 번 사용하여 다른 문자열에서 구성할 수 있는 문자열의 수는 − 3

설명 − str_2가 hello임을 알 수 있으므로 str_1의 문자를 사용하여 단어 hello의 형성을 정확히 한 번 확인할 것입니다. 보시다시피 str_1에는 hello라는 단어가 3개 있으므로 개수는 3입니다.

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

  • 문자열 str_1 및 str_2를 입력하고 해당 길이를 계산하고 추가 처리를 위해 함수에 데이터를 전달합니다.

  • str_2의 개수를 str_1에 저장하기 위한 임시 변수 count를 선언하고 INT_MAX로 초기화합니다. INT_MAX는 C++에서 변수가 보유할 수 있는 최대값을 지정하는 데 사용되며 INT_MAX의 값은 +2147483647입니다.

  • 영어로 된 26개의 알파벳이 있으므로 크기가 26인 배열을 만들고 0으로 초기화합니다.

  • 0에서 문자열 str_1의 길이까지 FOR 루프를 시작하고 arr[str_1[i] - 'a']를 1로 설정

  • 0에서 문자열 str_2의 길이까지 다른 루프를 시작하고 count를 count 또는 arr[str_2[i] - 'a']의 최소값으로 설정합니다.

  • 반품 횟수

  • 결과를 인쇄하십시오.

예시

#include <bits/stdc++.h>
using namespace std;
int atmost_once(string str_1, int len_str1, string str_2, int len_str2){
   int count = INT_MAX;
   int arr[26] = { 0 };
   for (int i = 0; i < len_str1 ; i++){
      arr[str_1[i] - 'a'] += 1;
   }
   for (int i = 0; i < len_str2; i++){
      count = min(count, arr[str_2[i] - 'a']);
   }
   return count;
}
int main(){
   string str_1 = "technical learning";
   int length_str1 = str_1.length();
   string str_2 = "learning";
   int length_str2 = str_2.length();
   cout<<"Count of strings that can be formed from another string using each character at-most
once are: "<<atmost_once(str_1,length_str1, str_2, length_str2);
   return 0;
}

출력

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

Count of strings that can be formed from another string using each character at-most once are: 1