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

C++의 사전에서 특정 패턴과 일치하는 모든 문자열 찾기

<시간/>

사전이라는 문자열 목록이 있다고 가정합니다. 다른 패턴 문자열이 있습니다. 우리의 임무는 패턴과 일치하는 문자열을 찾는 것입니다. 사전이 ["abb", "xyz", "aab", "kmm"]이고 패턴이 "stt"라고 가정하면 결과는 "abb" 및 "kmm"이 됩니다. 패턴은 처음에 하나의 문자를 가지기 때문에 두 개의 동일한 문자를 가지므로 동일한 패턴 문자열을 따릅니다.

이 문제를 해결하기 위해 패턴과 일치하는 사전의 모든 단어가 인코딩 후 패턴과 동일한 해시를 갖도록 패턴을 인코딩합니다. 사전의 모든 단어를 반복하고 해시가 동일한 곳에 표시합니다.

예시

#include<iostream>
#include<unordered_map>
#include<unordered_set>
using namespace std;
string stringEncode(string str) {
   unordered_map<char, int> map;
   string encoded_str = "";
   int i = 0;
   for (char ch : str) {
      if (map.find(ch) == map.end())
         map[ch] = i++;
         encoded_str += to_string(map[ch]);
      }
      return encoded_str;
   }
void matchedPattern(unordered_set<string> dict, string pattern) {
   int patt_len = pattern.length();
   string hash = stringEncode(pattern);
   for (string word : dict) {
      if (word.length() == patt_len && stringEncode(word) == hash)
         cout << word << " ";
   }
}
int main() {
   unordered_set<string> dict = {"abb", "xyz", "aab", "kmm"};
   string pattern = "stt";
   matchedPattern(dict, pattern);
}

출력

kmm abb