- Published on
Word Pattern.
Problem of the day - Word Pattern
Tag - Easy
Given a pattern
and a string s
, find if s
follows the same pattern.
Here follow means a full match, such that there is a bijection between a letter in pattern
and a non-empty word in s
.
Example 1:
Input: pattern = "abba", s = "dog cat cat dog" Output: true
I am not gonna lie, at first glance the problem seemed very tricky. But when I looked at the related tag hash table
, It was the light bulb moment for me.
But, there is some catch.
- I need to track, for each text in the pattern, respective word in string
s
, must always be the same. - And, vice versa too. For each respective word, it must follow the same pattern. (eg -
ab
-dog cat
) - Length of pattern must be same to number of words in string
s
After considering all the edge cases, I was able to submit it with 0ms run time, passing 100% C++ submissions.
class Solution {public: bool wordPattern(string pattern, string s) { int patt_ind = 0; int total_words = 0; string word = ""; map<char, string> list; map<string, char> rev_list; char element;
for(char c: s) { if(c == ' ') { element = pattern[patt_ind]; if(list[element] != "" && list[element] != word) return false; if(rev_list[word] && rev_list[word] != element) return false; list[element] = word; rev_list[word] = element; word = ""; patt_ind++; total_words++; } else { word += c; } } element = pattern[patt_ind]; if(list[element] != "" && list[element] != word) return false; if(rev_list[word] && rev_list[word] != element) return false; if(total_words + 1 != pattern.length()) return false; return true; }};
That was a pretty good problem. See you guys tomorrow!
If you feel, I am missing on something, feel free to reach out to me
I welcome your suggestions to improve it further!
Thanks for being part of my daily-code-workout journey. As always, if you have any thoughts about anything shared above, don't hesitate to reach out.
You might like previous editions of my coding diary