zoukankan      html  css  js  c++  java
  • LC 890. Find and Replace Pattern

    You have a list of words and a pattern, and you want to know which words in words matches the pattern.

    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.)

    Return a list of the words in words that match the given pattern. 

    You may return the answer in any order.

     

    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.

     

    Note:

    • 1 <= words.length <= 50
    • 1 <= pattern.length = words[i].length <= 20

    Runtime: 4 ms, faster than 62.45% of C++ online submissions for Find and Replace Pattern.

    注意一一对应要用两个字典。

    class Solution {
    public:
      vector<string> findAndReplacePattern(vector<string>& words, string pattern) {
        vector<string> ret;
        for(auto word : words){
          if(word.size() != pattern.size()) continue;
          unordered_map<char,char> mp_w2p;
          unordered_map<char,char> mp_p2w;
          bool shouldput = true;
          for(int i=0; i<word.size(); i++){
            if(!mp_w2p.count(word[i]) && !mp_p2w.count(pattern[i])){
              mp_w2p[word[i]] = pattern[i];
              mp_p2w[pattern[i]] = word[i];
            } else if(!mp_w2p.count(word[i]) || !mp_p2w.count(pattern[i])) {
              shouldput = false;
              break;
            }else if(mp_w2p[word[i]] != pattern[i] || mp_p2w[pattern[i]] != word[i]){
              shouldput = false;
              break;
            }
          }
          if(shouldput) ret.push_back(word);
        }
        return ret;
      }
    };
  • 相关阅读:
    Android中各级目录的作用
    轻量级java开发(一)-Hibernate 安装
    Eclipse 安装插件
    Eclipse超级完美汉化教程
    JAVA中extends 与implements区别
    Java基础语法总结
    C#笔试题面试题锦集(全)总20篇
    Nginx集群
    Redis 集群方案
    MS Sql Server 中主从库的配置和使用介绍
  • 原文地址:https://www.cnblogs.com/ethanhong/p/10188208.html
Copyright © 2011-2022 走看看