题目:
给定一种规律 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
思路:
这里要用到两个map,一个是字符和字符串的对应,一个是字符串和字符的对应。先在两个map里面查找键存不存在,存在的话就判断键与值的对应关系是否一致,不一致就不满足要求。如果键不存在就添加两个map的键值对。
代码:
class Solution {
public:
bool wordPattern(string pattern, string str) {
map<char, string>ptos;
map<string, char>stop;
int len = pattern.length();
string*s = new string[len];
int cnt = 0;
for (int i = 0; i < str.length(); i++)
{
if (str[i] == ' ')
cnt++;
}
if (cnt != len - 1)
return false;
int t = 0;
for (int i = 0; i < str.length(); i++)
{
if (str[i] != ' ')
s[t] += str[i];
else
t++;
}
for (int i = 0; i < len; i++)
{
if (ptos.find(pattern[i]) != ptos.end() && ptos[pattern[i]] != s[i] || stop.find(s[i]) != stop.end() && stop[s[i]] != pattern[i])
return false;
ptos[pattern[i]] = s[i];
stop[s[i]] == pattern[i];
}
return true;
}
};
代码还需要调整一下