Leetcode 291 Solution
This article provides solution to leetcode question 291 (word-pattern-ii)
Access this page by simply typing in "lcs 291" in your browser address bar if you have bunnylol configured.
Leetcode Question Link
https://leetcode.com/problems/word-pattern-ii
Solution
class Solution {
unordered_map<char, string> m;
unordered_set<string> visited;
public:
bool wordPatternMatch(const string& pattern, int i, const string& str, int j)
{
if (i == pattern.size() && j == str.size())
return true;
else if (i == pattern.size() || j == str.size())
return false;
auto pattern_ch = pattern[i];
if (m.find(pattern_ch) == m.end())
{
for (int k = j; k < str.size(); k++)
{
auto ss = str.substr(j, k - j + 1);
if (visited.find(ss) != visited.end())
continue;
m[pattern_ch] = ss;
visited.insert(ss);
if (wordPatternMatch(pattern, i + 1, str, k + 1))
return true;
m.erase(pattern_ch);
visited.erase(ss);
}
}
else
{
auto ss = m[pattern_ch];
if (str.substr(j, ss.size()) != ss)
return false;
if (wordPatternMatch(pattern, i + 1, str, j + ss.size()))
return true;
}
return false;
}
bool wordPatternMatch(string pattern, string str)
{
return wordPatternMatch(pattern, 0, str, 0);
}
};