力扣 290.单词模式 题解
题目
290.给定一种 pattern(模式) 和一个字符串 str ,判断 str 是否遵循相同的模式。
这里的遵循指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应模式。
链接:(https://leetcode-cn.com/problems/word-pattern/).
题解:由于题目是要完全匹配,可以将pattern表示的模式变为一个数组。同时 将str中不同的单词也转化为一个数组,最后直接比对两个数组是否相同即可。
class Solution {
public:
bool wordPattern(string pattern, string str) {
map<char,int> patM;
map<string,int> strM;
vector<int> p;
vector<int> s;
int index1=0;
int index2=0;
for(int i=0;i<pattern.length();i++)
{
auto it=patM.find(pattern[i]);
if(patM.find(pattern[i])==patM.end())
{
patM.insert(pair<char,int>(pattern[i],index1));
p.push_back(index1);
index1++;
}
else
{
p.push_back(it->second);
}
}
for(int i=0;;i++)
{
if(i>=str.length())
{
break;
}
if(str[i]==' ')
continue;
string temp;
for(int j=i;;j++)
{
if(str[j]==' '||j>=str.length()){
i=j-1;
//cout<<i<<endl;
break;
}
temp.push_back(str[j]);
}
auto it=strM.find(temp);
if(it==strM.end())
{
strM.insert(pair<string,int>(temp,index2));
s.push_back(index2);
index2++;
}
else
{
s.push_back(it->second);
}
}
if(index1!=index2||p.size()!=s.size())
return false;
bool flag=true;
for(int i=0;i<p.size();i++)
{
if(p[i]!=s[i])
{
flag=false;
break;
}
}
return flag;
}
};