• 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;
      }
    };
  • 相关阅读:
    windows下的文件遍历(使用CFindFile)
    hdu 1728 搜索求最少的转向次数
    linux中vsftpd配置文件详解
    QLineEdit 自动完成(使用setCompleter,内含一个ListView)
    Qt 的内部进程通信机制
    qt 获取windows 的消息(通过MFC的DLL的透明窗体转发消息)good
    JS的类型比较与转换图
    使用C#开发ActiveX控件
    MapXtreme+Asp.net 动态轨迹
    MS SQL 日常维护管理常用脚本(二)
  • 原文地址:https://www.cnblogs.com/ethanhong/p/10188208.html
Copyright © 2020-2023  润新知