1048. Longest String Chain

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