반응형
https://leetcode.com/problems/word-pattern/description/
자료구조 문제였습니다.
📕 풀이방법
📔 입력 및 초기화
1. c++은 split함수가 없으므로 만들어줍니다. 공백으로 구분해 split해주고 vector <string> v를 선언해 결과값을 저장합니다.2. map을 두 개 선언 후 v의 원소들을 순회하며 map m에는 {문자열, pattern}, map m2에는 {pattern, 문자열}로 저장해줍니다. 이때 기존에 이미 저장된 pattern이라면 건너뛰어 줍니다.3. 다시 v의 원소들을 순회하며 현재 문자열의 pattern이 나와야하는 pattern과 일치여부를 판별합니다.* s와 pattern의 크기가 1보다크며 같은것은 false입니다. 공백으로 split한 문자열 개수와 pattern크기가 달라도 false입니다.
📔 정답 출력 | 반환
일치하면 true 아니라면 false를 반환합니다.
📕 Code
📔 C++
class Solution {
public:
vector <string> split(string input, char delimiter){
vector <string> result;
stringstream ss(input);
string tmp;
while(getline(ss,tmp,delimiter)) result.push_back(tmp);
return result;
}
bool wordPattern(string pattern, string s) {
if(pattern == s && s.size() > 1) return false;
vector <string> v = split(s, ' ');
if(pattern.size() != v.size()) return false;
map<string, char> m;
map<char, string> m2;
for(int i = 0; i < v.size(); i++) {
if(m2.count(pattern[i])) continue;
m[v[i]] = pattern[i];
m2[pattern[i]] = v[i];
}
for(int i = 0; i < v.size(); i++) {
if(m[v[i]] != pattern[i]) {
return false;
}
}
return true;
}
};
*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.
'Algorithm > String' 카테고리의 다른 글
(C++) - LeetCode (easy) 345. Reverse Vowels of a String (0) | 2023.02.20 |
---|---|
(C++) - LeetCode (easy) 344. Reverse String (0) | 2023.02.16 |
(C++) - LeetCode (easy) 125. Valid Palindrome (0) | 2022.11.30 |
(C++) - LeetCode (easy) 58. Length of Last Word (0) | 2022.11.03 |
(C++, Rust) - 백준(BOJ) 23303 : 이 문제는 D2 입니다. (0) | 2022.09.14 |