LeetCode刷题_c++版-290单词规律

知识点

hash_map
hash_map 的遍历

代码

class Solution {
    
    
public:
    bool wordPattern(string pattern, string s) {
    
    
        //字符到单词的映射要唯一
        //单词到字符的映射也要唯一
        map<char, string> match;
        map<string, char> match_str_char;
        char patternChar;
        int j = 0;
        for(int i = 0; i<pattern.length(); i++){
    
    
            string temp_str = "";
            //如果pattern还没遍历结束,s已经遍历结束,则未匹配成功
            if(j>= s.length()) return false;
            else{
    
    
                //提取字符串
                while(j< s.length() && s[j] != ' '){
    
    
                    temp_str+= s[j];
                    j++;
                }
                if(s[j] == ' ') j++;
            }
            //如果未在字符到单词的映射中找到该字符
            if(match.find(pattern[i]) == match.end()){
    
    
                //添加映射
                match[pattern[i]] = temp_str;
                //如果在单词到字符的映射中未找到该字符,添加映射
                if(match_str_char.find(temp_str) == match_str_char.end()) match_str_char[temp_str] = pattern[i];
                //否则,若单词已经对应了其它字符,返回假
                else if(match_str_char[temp_str] !=pattern[i]) return false;
            }
            //否则,若字符已经对应了其它单词,返回假
            else if(match[pattern[i]] != temp_str) return false;
            
        }
        //如果字符已经遍历完成,单词还未完成,则返回假
        if(j < s.length()) return false;
        return true;
    }
};

提交结果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44343355/article/details/129107541