290.单词模式。给定一种 pattern(模式) 和一个字符串 str ,判断 str 是否遵循相同的模式。(c++方法)
题目描述:
给定一种 pattern(模式)
和一个字符串 str
,判断 str
是否遵循相同的模式。
这里的遵循指完全匹配,例如, pattern
里的每个字母和字符串 str
中的每个非空单词之间存在着双向连接的对应模式。
示例1:
输入: pattern ="abba"
, str ="dog cat cat dog"
输出: true
示例 2:
输入:pattern ="abba"
, str ="dog cat cat fish"
输出: false
示例 3:
输入: pattern ="aaaa"
, str ="dog cat cat dog"
输出: false
示例 4:
输入: pattern ="abba"
, str ="dog dog dog dog"
输出: false
说明:
你可以假设 pattern
只包含小写字母, str
包含了由单个空格分隔的小写字母。
实现方法:
class Solution { public: bool wordPattern(string pattern, string str) { int a=pattern.size(); int b=0; vector<string> strstr; vector<string> res; string tem=""; for(int i=0;i<str.size();i++) { if(str[i]==' ') { b++; strstr.push_back(tem); tem=""; } else tem=tem+str[i]; } b++; strstr.push_back(tem); if(a!=b) return false; for(int j=0;j<a;j++) { res.push_back(pattern[j]+strstr[j]); } for(int j=0;j<a;j++) { for(int k=j+1;k<a;k++) { int ll=res[j].size(); int aa=res[k].size(); char mm[ll]; char nn[aa]; strcpy(mm,res[j].c_str()); strcpy(nn,res[k].c_str()); char* p=mm; char* q=nn; int tag=strcmp(p,q); if(tag!=0) { if(res[j][0]!=res[k][0]&&strstr[j]!=strstr[k]) { continue; } else return false; } else continue; } } return true; } };