Short Encoding of Words

ㅋㅋ·2022년 6월 20일
0

알고리즘-leetcode

목록 보기
15/135

주어진 문자열들을 한 줄로 쭉 이어 붙인다.

문자열과 문자열 사이는 '#' 글자를 넣는다.

특정 문자열이 다른 문자열과 같거나, 포함되어 있을 때 특정 문자열과 '#'을 지운다.

이렇게 모든 중복 문자를 지웠을 때 문자열의 길이를 구하는 문제이다.

class Solution {
public:
    static const int MAX_SUFFIX_LENGTH = 7;
    
    int minimumLengthEncoding(vector<string>& words) {
        
        unordered_set<string> suffixTable{};

        for (string &word : words)
        {
            string temp{""};
            
            int wordSize = min((int) word.size(), MAX_SUFFIX_LENGTH);
            for (int i = 1; i < wordSize; i++)
            {
                string key = word[wordSize - i] + temp;
                suffixTable.insert(key);
                temp = key;
            }
        }
        
        int result{0};
        unordered_set<string> wordTable{};

        for (string &word : words)
        {
            if (wordTable.count(word) != 0)
            {
                continue;
            }
            
            if (0 < suffixTable.count(word))
            {
                continue;
            }
            
            wordTable.insert(word);
            result += (word.size() + 1);
        }

        return result;
    }
};

0개의 댓글