【LeetCode】290.单词规律【哈希】

1.题目链接
点击这里

2.解题思路
pattern中字符构成的集合与所有单词构成的集合若形成双射,则匹配成功;否则匹配失败。用两个哈希表来记录映射关系,由于单个哈希表只能体现单向的映射关系(即只能反映A到B存在映射关系,即只能反映是否为满射,不能反映是否为单射)所以需要再来一个哈希表记录从B到A的映射关系,只由两个表对应且一一对应,才能说匹配成功。

3.代码

class Solution {
    
    
public:
    bool wordPattern(string pattern, string s) {
    
    

        unordered_map<string,char> mp;//s->pattern
        unordered_map<char,string> np;//pattern->s

        int i,j;
        for(i=0,j=0;i<(int)pattern.size()&&j<(int)s.size();){
    
    

            string mid="";
            int k;
            for(k=j;k<(int)s.size()&&s[k]!=' ';k++) mid+=s[k];
            
            if(mp.count(mid)&&mp[mid]!=pattern[i]) return false;//不满足单射,当前单词相应的符号不是之前这个单词确定好的匹配符号
            if( np.count(pattern[i])&&np[pattern[i]]!=mid ) return false;//同理,不满足单射
            mp[mid]=pattern[i];
            np[pattern[i]]=mid;
            j=k+1;
            i++;
        }

        return i>=(int)pattern.size()&&j>=(int)s.size();//需满足满射
    }
};

おすすめ

転載: blog.csdn.net/qq_43579980/article/details/117934576