leetcode 290.单词规律

leetcode 290.单词规律

题干

给定一种规律 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 包含了由单个空格分隔的小写字母。

题解

pattern与单词应当是相互对应的关系,一个pattern不能对应多个单词,一个单词也不能对应多个pattern
为了方便操作,先通过空格将s分成若干个字符串存入vector,然后建立pattern到单词和单词到pattern的哈希表
遍历pattern比较即可

class Solution {
public:
    bool wordPattern(string pattern, string s) {
        unordered_map<char,string> patternToString;
        unordered_map<string,char> stringToPattern;
        vector<string> ss;
        string temp = "";

        for(int i = 0 ; i < s.length() ; ++i){
            if(s[i] == ' '){
                ss.push_back(temp);
                temp = "";
            }else{
                temp += s[i];
            }
        }
        ss.push_back(temp);

        if(pattern.size() != ss.size()){
            return false;
        }

        for(int i = 0 ; i < pattern.size() ; ++i){
            if(patternToString.find(pattern[i]) == patternToString.end()){
                patternToString[pattern[i]] = ss[i];
                if(stringToPattern.find(ss[i]) != stringToPattern.end()){
                    return false;
                }
                stringToPattern[ss[i]] = pattern[i];
            }
            //cout<
            if(patternToString[pattern[i]] != ss[i]){
                return false;
            }
        }

        return true;
    }
};

你可能感兴趣的:(leetcode,leetcode)