在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