Leetcode 890. Find and Replace Pattern Sure, let’s break down the solution for the LeetCode problem “890. Find and Replace Pattern”. Here we will discuss the problem statement, potential clarifications, a detailed strategy, code implementation in C++, and analysis of the time complexity.
You are given a list of strings words
and a string pattern
. You need to return a list of words
that match the given pattern
.
A word matches the pattern if there exists a permutation of letters such that pattern
could be transformed into the word
. Match the pattern means that there is a bijection between a letter in pattern
and a letter in word
.
words
list and the pattern
have the same length?
To solve the problem, you need to compare the structure of each word with the pattern. This can be achieved using a mapping mechanism to ensure each character in the word maps to a character in the pattern uniquely and vice versa.
Here’s a step-by-step strategy:
Here is the C++ implementation of the strategy outlined:
#include <vector>
#include <string>
#include <unordered_map>
using namespace std;
vector<int> normalize(const string& s) {
unordered_map<char, int> char_to_index;
vector<int> normalized;
for (char c : s) {
if (char_to_index.find(c) == char_to_index.end()) {
char_to_index[c] = char_to_index.size();
}
normalized.push_back(char_to_index[c]);
}
return normalized;
}
vector<string> findAndReplacePattern(vector<string>& words, string pattern) {
vector<string> result;
vector<int> pattern_norm = normalize(pattern);
for (const string& word : words) {
if (normalize(word) == pattern_norm) {
result.push_back(word);
}
}
return result;
}
This approach ensures a clear, concise, and efficient solution to identify and select words matching the given pattern in terms of structural character mapping.
Got blindsided by a question you didn’t expect?
Spend too much time studying?
Or simply don’t have the time to go over all 3000 questions?