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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/word-pattern

问题分析:
采用哈希表来进行存储,我这里采用的是string->char的哈希表,会忽略示例2的情况,所以又加了个哈希表上去。

代码如下:

class Solution {
public:
    bool wordPattern(string pattern, string s) {
        unordered_map<string,char> hashTable;
        map<int,string> table;//这个是用来分割存储s中的字符串的,方便后面进行操作
        int k=0;
        for(int i=0;i<s.length();i++){
            if(s[i]!=' '){
                table[k]+=s[i];
            }
            else{
                k++;
            }
        }
        map<char,string> isagain;//这个就是第二个哈希表,用来判别一个char是否对应两个string
        //这个就是判断字符和字符串数量是否相等,不相等的话肯定是false的
        if(k+1!=pattern.length()) return false;  
        for(int i=0;i<pattern.length();i++){
            if(hashTable.count(table[i])==0){
                hashTable[table[i]]=pattern[i];
                if(isagain.count(pattern[i])==0){
                    isagain[pattern[i]]=table[i];
                }
                else{
                    if(isagain[pattern[i]]!=table[i]){
                        return false;
                    }
                }
            }
            else{
                if(hashTable[table[i]]!=pattern[i]){
                    return false;
                }
            }
        }
        return true;
    }
};

你可能感兴趣的:(字符串,leetcode,哈希表)