Leetcode 290. Lei da palavra

Leetcode 290. Lei da palavra

Raiz da pergunta

Dado um padrão regular e uma string str, julgue se str segue o mesmo padrão.
Aqui, segue refere-se à correspondência completa. Por exemplo, há uma conexão bidirecional entre cada letra no padrão e cada palavra não vazia na string str.

Exemplo 1:
entrada: padrão = "abba", str = "cachorro gato gato cachorro"
Saída: verdadeiro

Exemplo 2:
entrada: padrão = "abba", str = "cachorro gato gato peixe"
Saída: falso

Exemplo 3:
entrada: padrão = "aaaa", str = "cachorro gato gato cachorro"
Saída: falso

Exemplo 4:
Input: pattern = "abba", str = "dog dog dog dog"
Saída: false
Nota:
Você pode assumir que o padrão contém apenas letras minúsculas e str contém letras minúsculas separadas por um único espaço.

responda

O padrão e a palavra devem corresponder um ao outro. Um padrão não pode corresponder a várias palavras e uma palavra não pode corresponder a vários padrões.
Para facilitar a operação, primeiro divida s em várias strings por meio de espaços e armazene-as no vetor, e em seguida, crie o padrão para a palavra e a tabela de hash de palavra para padrão,
cruze o padrão e compare

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<<patternToString[pattern[i]]<<' '<<ss[i]<<endl;
            if(patternToString[pattern[i]] != ss[i]){
    
    
                return false;
            }
        }

        return true;
    }
};

Acho que você gosta

Origin blog.csdn.net/weixin_43662405/article/details/111247628
Recomendado
Clasificación