← All problems

890. Find and Replace Pattern

MediumOpen on LeetCodeProblem statement

Problem Statement

890. Find and Replace Pattern

Medium


Given a list of strings words and a string pattern, return a list of words[i] that match pattern. You may return the answer in any order.

A word matches the pattern if there exists a permutation of letters p so that after replacing every letter x in the pattern with p(x), we get the desired word.

Recall that a permutation of letters is a bijection from letters to letters: every letter maps to another letter, and no two letters map to the same letter.

 

Example 1:

Input: words = ["abc","deq","mee","aqq","dkd","ccc"], pattern = "abb"
Output: ["mee","aqq"]
Explanation: "mee" matches the pattern because there is a permutation {a -> m, b -> e, ...}. 
"ccc" does not match the pattern because {a -> c, b -> c, ...} is not a permutation, since a and b map to the same letter.

Example 2:

Input: words = ["a","b","c"], pattern = "a"
Output: ["a","b","c"]

 

Constraints:

C++

Source file
class Solution {
public:
    vector<string> findAndReplacePattern(vector<string>& words, string pattern) {
        vector<string> res;
        map <char, char> m, n;
        for(auto e:words){
            bool valid = true;
            for(int i=0; i<e.size(); i++){
                // cout << m[pattern[i]] << "\t" << e[i] << endl;
                if(m[pattern[i]]){
                    if(m[pattern[i]]!=e[i])
                        valid = false;
                        
                }
                else if(n[e[i]]){
                    if(n[e[i]]!=pattern[i])
                        valid = false;
                        
                }
                else {
                    m[pattern[i]] = e[i];
                    n[e[i]] = pattern[i];
                };
            }
            if (valid){
                res.push_back(e);
                cout << "true" << endl;
            }
            else cout << "false" << endl;
            m.clear();
            n.clear();
        }
        return res;
    }
};