首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >w1_to_w2.count和w2_to_w1.count是如何工作的

w1_to_w2.count和w2_to_w1.count是如何工作的
EN

Stack Overflow用户
提问于 2021-06-10 23:27:43
回答 1查看 45关注 0票数 0
代码语言:javascript
复制
class Solution {
public:
    vector<string> findAndReplacePattern(vector<string>& words, string p) {
        vector<string> ans;
        for(auto &w:words){
            if(match(w,p))
                ans.push_back(w);
        }
        return ans;
    }
    bool match(string &w1,string &w2){
        unordered_map<char,char>w1_to_w2,w2_to_w1;
        for( i=0;i<w1.size();i++)
            if( (w1_to_w2.count(w1[i]) && w1_to_w2[w1[i]] != w2[i]) || 
                (w2_to_w1.count(w2[i]) && w2_to_w1[w2[i]] != w1[i]) ) 
                return false; 
            else
                w1_to_w2[w1[i]] = w2[i],
                w2_to_w1[w2[i]] = w1[i];
    
        return true;
    }
};

输入:

单词= "abc","deq","mee","aqq","dkd","ccc“

pattern = "abb“

输出:

"mee","aqq“

解释:

"mee“与模式匹配,因为有一个排列{a -> m, b -> e, ...}。"ccc“与模式不匹配,因为{a -> c, b -> c, ...}不是一个排列,因为ab映射到同一个字母。

这是如何工作的,尤其是count?请一步一步地解释。

EN

回答 1

Stack Overflow用户

发布于 2021-06-13 23:56:24

findAndReplacePattern(words, p)只是为words中的每个单词调用match( word , p) -如果它们匹配,则将单词附加到ans,后者稍后将返回。

match(w1, w2)中,w1_to_w2w2_to_w1最初是空的,i会沿着这两个字符串计数(假设这两个字符串的长度相同-这通常是一个危险的假设,可能会导致程序崩溃)。

在第一次迭代中,当i为0时,.count(...)调用返回0,因为unordered_maps中没有任何内容,所以函数不返回。取而代之的是if计算else子句,该子句记录:

通过执行赋值w2_to_w1[w2[i]] = w1[i].,

  • w1中的第一个字母- w1[0] -对应于w2中的第一个字母,
  • w2中的第一个字母-<代码>D21-对应于<代码>D22中的第一个字母

当它沿着单词中的其他字母移动时...

代码语言:javascript
复制
w1_to_w2.count(w1[i]) && w1_to_w2[w1[i]] != w2[i]

...is说,如果我们已经在w1中看到了与w1[i]相同的字母,而它在w2中对应的字母(即w1_to_w2[w1[i]])与现在对应的字母(即w2[i])不同,这将是返回false的一个原因,或者...

代码语言:javascript
复制
w2_to_w1.count(w2[i]) && w2_to_w1[w2[i]] != w1[i]

...if我们已经在w2中看到了与w2[i]相同的字母,并且之前在w1中它所对应的字母(即w2_to_w1[w2[i]])与现在所对应的字母(即w1[i])不同,这将是返回false的另一个原因。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67924191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档