
//使用map构建pattern与单词之间的关系,使用set确保关系一一对应
class Solution {
public:
bool wordPattern(string pattern, string str) {
vector<string> input;
int cnt = 0;
map<char, string> record;
set<string> helper;
for (int i = 0; i < str.length();) {
while (str[i + cnt] != ' ' && (i + cnt) < str.length()) {
cnt++;
}
input.push_back(str.substr(i, cnt));
i += (cnt + 1);
cnt = 0;
}
if (input.size() != pattern.length()) return false;
for (int i = 0; i<pattern.length(); i++) {
if (record.find(pattern[i]) == record.end()) {//不存在
if (helper.find(input[i]) != helper.end()) {//已经建立过了
return false;
}
record.insert(make_pair(pattern[i], input[i]));
helper.insert(input[i]);
}
else if (record[pattern[i]] != input[i]) {
return false;
}
}
return true;
}
};
int main()
{
Solution sol;
string pattern = "abba", s = "cat dog dog cat";
cout << sol.wordPattern(pattern, s);
cout<< endl;
return 0;
}

本文深入探讨了一种基于模式和字符串的匹配算法,通过使用map和set数据结构来确保模式与单词间的一一对应关系,实现了高效且准确的模式匹配过程。文章详细介绍了算法的实现逻辑,包括如何将输入字符串分割成子串,以及如何通过查找和插入操作来验证模式的有效性。

301

被折叠的 条评论
为什么被折叠?



