一、题目描述
给定一种 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
二、题目分析
题目比较简单,注意两点
1)需要建立字母和单词一一对应的关系
2)注意用空格分割字符串的时候,最后一个单词后面没有空格
三、代码
1 class Solution { 2 public: 3 bool wordPattern(string pattern, string str) { 4 if (pattern == "")return false; 5 map<char, string>mp1; 6 map<string, char>mp2;//一一对应 7 vector<string>vs; 8 int i; 9 string s = ""; 10 for (i = 0; i < str.size(); ++i) { 11 if (str[i] == ' ') { 12 if (s != "")vs.push_back(s); 13 s = ""; 14 } 15 else s += str[i]; 16 } 17 if (s != "")vs.push_back(s);//注意最后一个单词 18 if (pattern.size() != vs.size())return false; 19 for (i = 0; i < pattern.size(); ++i) { 20 cout << vs[i] << " "; 21 if (mp1.find(pattern[i]) != mp1.end()) { 22 if (mp1[pattern[i]] != vs[i])return false; 23 } 24 else mp1[pattern[i]] = vs[i]; 25 if (mp2.find(vs[i]) != mp2.end()) { 26 if (mp2[vs[i]] != pattern[i])return false; 27 } 28 else mp2[vs[i]] = pattern[i]; 29 } 30 return true; 31 } 32 };