주어진 문자열들을 한 줄로 쭉 이어 붙인다.
문자열과 문자열 사이는 '#' 글자를 넣는다.
특정 문자열이 다른 문자열과 같거나, 포함되어 있을 때 특정 문자열과 '#'을 지운다.
이렇게 모든 중복 문자를 지웠을 때 문자열의 길이를 구하는 문제이다.
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;
}
};