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;
}
};