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

C++의 주어진 문자 집합에서 단어의 가능성


이 문제에서 우리는 두 개의 문자열 str1과 str2입니다. 우리의 임무는 str2의 모든 문자가 str1에 있는지 확인하는 것입니다.

문제를 이해하기 위해 예를 들어보겠습니다.

입력 -

str1 = “Hello”
str2 = “Hell”

출력 - 네

설명 - str2의 모든 문자는 str1에 있습니다.

이 문제를 해결하려면 str1에서 str2의 각 문자를 확인한 다음 솔루션을 반환하는 간단한 솔루션이 있습니다.

하지만 효과적인 솔루션을 만들어야 합니다. 따라서 우리는 주파수 배열(모든 유효한 문자에 대해 길이 256)을 사용한 다음 str1을 순회하고 발생한 것보다 해당 문자를 기반으로 주파수 배열의 값을 증가시킵니다. 그런 다음 str2를 횡단하여 발생 시 주파수 배열을 줄입니다. 그리고 각 반복에서 이 빈도가 음수가 되었는지도 확인합니다. 가능하지 않은 경우 가능합니다.

예시

솔루션 구현을 보여주는 프로그램

#include <iostream>
#include <string.h>
using namespace std;
bool isPresent(string str1, string str2){
   int freq[256] = { 0 };
   for (int i = 0; i<str1.length(); i++)
      freq[str1[i]]++;
   for (int i=0;i<str2.length(); i++) {
         if (freq[str2[i]] < 1)
            return false;
   }
   return true;
}
int main() {
   string str1 = "tutorialspoint";
   string str2 = "point";
   cout<<"All charcters of '"<<str2<<"' are ";
   isPresent(str1,str2)?cout<<"present":cout<<"not present";
   cout<<" in '"<<str1<<"' ";
   return 0;
}

출력

All charcters of 'point' are present in 'tutorialspoint'