给定一种规律 pattern
和一个字符串 s
,判断 s
是否遵循相同的规律。
这里的 遵循 指完全匹配,例如, pattern
里的每个字母和字符串 s
中的每个非空单词之间存在着双向连接的对应规律。
示例1:
输入: pattern ="abba"
, s ="dog cat cat dog"
输出: true
示例 2:
输入:pattern ="abba"
, s ="dog cat cat fish"
输出: false
示例 3:
输入: pattern ="aaaa"
, s ="dog cat cat dog"
输出: false
class Solution {
public:
bool wordPattern(string pattern, string s)
{
int n=s.length();
unordered_map<char,string> um_p;
unordered_map<string,char> um_s;
int i=0;
for(char ch:pattern)
{
if(i>=n)
{
return false;
}
int j=i;
while(j<n&&s[j]!=' ')
{
j++;
}
string temp=s.substr(i,j-i);
if(um_p.count(ch)&&um_p[ch]!=temp)
{
return false;
}
if(um_s.count(temp)&&um_s[temp]!=ch)
{
return false;
}
um_p[ch]=temp;
um_s[temp]=ch;
i=j+1;
}
return i>=n;
}
};