給定一段摩斯密碼編碼字符串(由 . 和 - 組成)和一個包含 n 個單詞的字典。每個單詞可轉換為對應的摩斯編碼。求有多少種不同的單詞序列(句子)拼接後的摩斯編碼恰好等於給定編碼。答案模 1,000,000,007。
定義 dp[i] 表示前 i 個字符(編碼前綴)的合法解碼方案數。dp[0] = 1(空串 1 種方案)。
狀態轉移:對每個位置 i,嘗試匹配字典中每個單詞的編碼 code,若 s.substr(i, code.len) == code,則 dp[i + code.len] += dp[i]。
dict_codes;
for (each word) {
std::string code;
for (char c : word) code += morse[c - 'A'];
dict_codes.push_back(code);
}