Find and Replace Pattern

ㅋㅋ·2022년 7월 29일
0

알고리즘-leetcode

목록 보기
35/135

문자열 하나와 문자열이 담긴 벡터를 받는다.

해당 문자열의 패턴을 파악하여 벡터 내에 같은 패턴을 가진 문자열들을 반환해야 한다.

패턴은 문자 순서와 문자열 내의 문자 개수로 파악할 수 있다.

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;
    }
};

0개의 댓글