leetcode - 290. Word Pattern
주제
string
문제
- https://leetcode.com/problems/word-pattern
pattern과 문자열이 주어질 때, 하나의 문자열은 하나의 패턴에 일치한다.
pattern과 문자열이 같은 단어로 매핑되어 서로 같다면 true, 아니라면 false를 리턴하라
입출력 예시
예시 1
입력: 패턴 = "abba", s = "dog cat cat dog"
출력 : true
설명:
단사함수는 다음과 같이 성립할 수 있습니다.
'a'"dog"지도는 . 입니다 .
'b'"cat"지도는 . 입니다 .
예시 2
입력: 패턴 = "abba", s = "개 고양이 고양이 물고기"
출력 : false
예시 3
입력: 패턴 = "aaaa", s = "개 고양이 고양이 개"
출력 : false
조건
- 1 <= pattern.length <= 300
- pattern소문자 영어 글자만 포함합니다.
- 1 <= s.length <= 3000
- s소문자 영어 문자와 공백만 포함합니다 ‘ ‘.
- s 앞뒤 공백이 없습니다 .
- 모든 단어는 공백 하나로s 구분됩니다 .
문제풀이
- map과 stringbuilder를 초기화한다.
- words를 split하여 pattern length와 비교한 작은 값을 구해 반복문을 돈다.
- map에 words가 없다면 집어넣는다.
- pattern으로 map에서 찾아 builder로 string을 만든다.
- builder로 만들어진 string과 s를 비교하여 리턴한다.
class Solution {
public boolean wordPattern(String pattern, String s) {
StringBuilder appender = new StringBuilder();
Map<Character, String> map = new HashMap<Character, String>();
String[] words = s.split(" ");
int minLength = Math.min(pattern.length(), words.length);
for (int i = 0; i < minLength; i++) {
char key = pattern.charAt(i);
if (!map.containsValue(words[i])) {
map.put(key, words[i]);
}
}
for (int i = 0; i < pattern.length(); i++) {
char key = pattern.charAt(i);
appender.append(map.get(key) + " ");
}
return s.equals(appender.toString().trim());
}
}
댓글남기기