leetcode 290. 单词模式(Word Pattern)

题目描述:

给定一种 pattern(模式) 和一个字符串 str ,判断 str 是否遵循相同的模式。

这里的遵循指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应模式。

示例1:

    输入: pattern = "abba", str = "dog cat cat dog"
    输出: true

示例 2:

    输入: pattern = "abba", str = "dog cat cat fish"
    输出: false

示例 3:

    输入: pattern = "aaaa", str = "dog cat cat dog"
    输出: false

示例 4:

    输入: pattern = "abba", str = "dog dog dog dog"
    输出: false

说明:
你可以假设 pattern 只包含小写字母, str 包含了由单个空格分隔的小写字母。


算法:

class Solution {
public:
    bool wordPattern(string pattern, string str) {
        unordered_map<char, string> mp1;
        unordered_map<string, char> mp2;
        vector<string> words;
        int len = str.size();
        int i=0, j=0;
        while(i<len){
            while(j<len && str[j] != ' '){
                j++;
            }
            if(i != j){
                words.push_back(str.substr(i, j-i));
            }
            j++;
            i = j;
        }
        int sz = pattern.size();
        if(sz != words.size()){
            return false;
        }else{
            for(int i = 0; i < sz; i++){
                char ch = pattern[i];
                string wd = words[i];
                if(mp1.find(ch) == mp1.end() && mp2.find(wd) == mp2.end()){
                    mp1[ch] = wd;
                    mp2[wd] = ch;
                }else if(mp1.find(ch) != mp1.end() && mp2.find(wd) != mp2.end()){
                    if(mp1[ch] != wd || mp2[wd] != ch){
                        return false;
                    }
                }else{
                    return false;
                }
            }
            return true;
        }
    }
};

猜你喜欢

转载自www.cnblogs.com/zhanzq/p/10572429.html
今日推荐