문자열 하나와 문자열이 담긴 벡터를 받는다.
해당 문자열의 패턴을 파악하여 벡터 내에 같은 패턴을 가진 문자열들을 반환해야 한다.
패턴은 문자 순서와 문자열 내의 문자 개수로 파악할 수 있다.
class Solution {
public:
void StringToHashInformation(string &word, vector<int> &order, vector<int> &number)
{
unordered_map<char, int> hashmap{};
int streak{0};
char previous{word[0]};
for (char &c : word)
{
if (previous == c)
{
streak++;
}
else
{
order.emplace_back(streak);
streak = 1;
}
hashmap[c]++;
previous = c;
}
order.emplace_back(streak);
for (char &c : word)
{
number.emplace_back(hashmap[c]);
}
}
vector<string> findAndReplacePattern(vector<string>& words, string pattern) {
vector<string> result{};
vector<int> targetOrder{};
vector<int> targetNumber{};
StringToHashInformation(pattern, targetOrder, targetNumber);
vector<int> order{};
vector<int> number{};
for (string &word : words)
{
order.clear();
number.clear();
StringToHashInformation(word, order, number);
if (order == targetOrder && number == targetNumber)
{
result.emplace_back(word);
}
}
return result;
}
};