class Solution {
public:
    vector<string> findAndReplacePattern(vector<string>& words, string pattern) {
        vector<string> ans;
        int t=words.size(),cnt=pattern.size();
        for (int i=0;i<t;i++)
            if (words[i].size()==cnt){
                bool check=true;
                bool flag[30];  //字母b作为映射结果,已经存在映射规则
                char f[30];     //字母a映射的字母f[a]
                for (int i=0;i<26;i++)
                    f[i]=flag[i]=0;
                for (int j=0;j<cnt;j++){
                    if (!f[words[i][j]-'a']){   //新建映射规则
                        f[words[i][j]-'a']=pattern[j];
                        if (flag[pattern[j]-'a']){   //映射规则矛盾(多对一)
                            check=false;
                            break;
                        }
                        else
                            flag[pattern[j]-'a']=true;
                    }
                    else if ((f[words[i][j]-'a']!=pattern[j])){ //不能匹配
                        check=false;
                        break;
                    }
                }
                if (check)
                    ans.push_back(words[i]);
            }
        return ans;
    }
};
 
 
