문제
Given apattern
and a stringstr
, find ifstr
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 str.Example 1:
Input: pattern = "abba", str = "dog cat cat dog" Output: true
Example 2:
Input: pattern = "abba", str = "dog cat cat fish" Output: false
Example 3:
Input: pattern = "aaaa", str = "dog cat cat dog" Output: false
Example 4:
Input: pattern = "abba", str = "dog dog dog dog" Output: false
Notes:
You may assumepattern
contains only lowercase letters, andstr
contains lowercase letters that may be separated by a single space.
주어지는 pattern과 str의 패턴이 같으냐! 하는 문제이다.
필자는 map 2개를 선언해서, pattern과 str을 숫자의 패턴으로 만들어 비교하였다.
예를 들어, abba -> 0110, car cat cat dog -> 0112 이런식으로 말이다.
간단하지만, 강력한 방법인 것 같다.
전체적인 소스코드는 아래와 같다.
class Solution {
public:
bool wordPattern(string pattern, string str) {
string p1, p2;
unordered_map<char, int> um1;
unordered_map<string, int> um2;
int val = 1;
for (int i = 0; i < pattern.size(); i++) {
if (um1[pattern[i]] == 0) {
um1[pattern[i]] = val;
val++;
}
p1 += to_string(um1[pattern[i]]);
}
val = 1;
for (int i = 0; i < str.size(); i++) {
string s;
while (i < str.size() && str[i] != ' ') {
s += str[i];
i++;
}
if (um2[s] == 0) {
um2[s] = val;
val++;
}
p2 += to_string(um2[s]);
}
return p1 == p2;
}
};
오늘도 하루를 마무리하며, 내일은 더 열심히 해야지 생각한다. 생각만으로 끝나지 않도록 하자!