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;
      }
    };
  • 相关阅读:
    树莓派4B 多屏 QT程序窗口全屏 QScreen 只能获取1个屏幕
    树莓派4B 微雪7寸触摸屏 双屏 触摸屏校正
    虚拟机 ubuntu18 树莓派4 QT5.14.2 交叉编译
    Qt 指定 so库 运行时路径
    building qtqml requires python
    python django 测试报告 发送邮件
    jmeter XPath Extractor
    python+unittest+HTMLTestRunner生成测试报告
    Genymotion、 uiautomatorviewer、 appium报错
    jmeter forEach控制器
  • 原文地址:https://www.cnblogs.com/ethanhong/p/10188208.html
Copyright © 2011-2022 走看看