- String chainμμ
WORD(k)
λ WORD(k-1)
μμ ν κΈμλ₯Ό μΆκ°ν΄μ λ§λ€μ΄μ§λ€λ μ¬μ€μ λ€μ§μ΄μ μκ°νλ©΄ ν μ μλ λ¬Έμ . - κ³μ κΈμλ₯Ό μΆκ°νλ λ°©μμΌλ‘ νμ΄μΌ νλ€κ³ μκ°ν΄μ λͺ» νμλ κ² κ°λ€ (μκ° μ νμ κ±Έλ Έλ€).
- νμ¬ λ¨μ΄
WORD(K)
μμ μμμ μμΉμ μλ ν κΈμλ₯Ό λΊ κ² subWord = WORD(k-1)
μ€ chainμ κΈΈμ΄κ° κ°μ₯ κΈ΄ κ² chains[subWord] + 1
μ νμ¬ λ¨μ΄μ chain κΈΈμ΄ chains[word]
λ‘ νλ€.
class Solution {
public:
int longestStrChain(vector<string>& words) {
auto compare = [](string& a, string& b) {
return a.length() < b.length();
};
sort(words.begin(), words.end(), compare);
int result = 0;
unordered_map<string, int> chains;
for (auto& word : words) {
int subResult = 0;
for (int i = 0; i < word.length(); ++i) {
auto subWord = word;
subWord.erase(i, 1);
subResult = max(subResult, chains[subWord] + 1);
}
chains[word] = subResult;
result = max(result, subResult);
}
return result;
}
};