Leet Code - 290. Word Pattern(C++)

포타토·2020년 3월 23일
0

알고리즘

목록 보기
66/76

예제: Word Pattern

문제
Given a pattern and a string str, find if str 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 assume pattern contains only lowercase letters, and str 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;
	}
};

풀이 후기

오늘도 하루를 마무리하며, 내일은 더 열심히 해야지 생각한다. 생각만으로 끝나지 않도록 하자!

profile
개발자 성장일기

0개의 댓글