63.单词规律
题目内容:
代码及思路:
#include<iostream>
#include<vector>
#include<string>
#include<unordered_map>
using namespace std;
class Solution {
public:
bool wordPattern(string pattern, string str) {
unordered_map<char, string> map1; //用于存放pattern中对应字符与str中相应字符串的映射对应关系
//另外还需要设置一个map用来排除abba与dog dog dog dog的情况,也就是字符串与字符之间的映射关系
unordered_map<string, char> map2; //一旦相同的string对应的char不同则说明不匹配
//1.首先将str中几个字符串分别拆分存储
vector<string> str1;
for (int i = 0,j=0; i < str.size(); i++)
{
if (str[i] == ' ')
{
string temp = str.substr(j, i - j);
str1.push_back(temp);
j = i + 1;
}
if (i == str.size() - 1) //对于最后一个字符串
{
string temp = str.substr(j, i - j+1);
str1.push_back(temp);
}
}
//如果个数不一样,肯定不匹配
if (pattern.size() != str1.size())
return false;
for (int i = 0; i < pattern.size(); i++)
{
//单词或者模板未出现,则开始插入键值
if (map1.find(pattern[i]) == map1.end() && map2.find(str1[i]) == map2.end())
{
map1.insert(make_pair(pattern[i], str1[i]));
map2.insert(make_pair(str1[i], pattern[i]));
}
//当所有的进行对应配对之后,在对键值进行比较
else if(map1[pattern[i]]!=str1[i])
{
return false;
}
}
return true;
}
};
int main()
{
Solution* object = new Solution();
string pattern, str;
getline(cin, pattern);
getline(cin, str);
bool res = object->wordPattern(pattern, str);
cout << res << endl;
}