2022.7.31今天你刷题了吗?
题目:
给定一种规律 pattern 和一个字符串 s ,判断 s 是否遵循相同的规律。
这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 s 中的每个非空单词之间存在着双向连接的对应规律。
分析:
给定两个字符串,需要判断它们是否满足匹配条件,举例如下:
“aabb” “cat cat dog dog”
相当于a=cat b=dog,则满足条件
“aabb” “cat dog cat dog”
因为a=cat,后面又有a=dog,则不满足
“aab” “cat cat cat cat”
数量对不上,不满足
因此,对于“cat cat”字符串,我们先把他保存在vector中,然后遍历“aabb”字符串,每次遍历需要判断两个条件。1.“aabb”中已经存在并且当前的aabb对应的cat不一样,则返回fasle。
2.“aabb”中不存在并且但前的cat也存在,则返回false
解析:
class Solution {
public:
bool wordPattern(string pattern, string s) {
unordered_map<char, string>u1;
vector<string>vec;
string s1;
for (int i = 0; i < s.size(); i++)
{
if (s[i] != ' ')
{
s1 += s[i];
}
else
{
vec.push_back(s1);
s1.clear();
}
}
vec.push_back(s1);
s1.clear();
if (pattern.size() != vec.size())
{
return false;
}
for (int i = 0; i < pattern.size(); i++)
{
if (u1.count(pattern[i]) && u1[pattern[i]] != vec[i])//aa存在,并且aa对于的值和现在不一样
{
return false;
}
else if (!(u1.count(pattern[i])))
{
for (auto it : u1)
{
if (it.second == vec[i])
{
return false;
}
}
}
u1[pattern[i]] = vec[i];
}
return true;
}
};