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