1639.Number of Ways to Form a Target String Given a Dictionary === ###### tags: `Hard`,`Array`,`String`,`DP` [1639. Number of Ways to Form a Target String Given a Dictionary](https://leetcode.com/problems/number-of-ways-to-form-a-target-string-given-a-dictionary/) ### 題目描述 You are given a list of strings of the **same length** `words` and a string `target`. Your task is to form `target` using the given `words` under the following rules: * `target` should be formed from left to right. * To form the i^th^ character (**0-indexed**) of `target`, you can choose the k^th^ character of the j^th^ string in `words` if `target[i]` = `words[j][k]`. * Once you use the k^th^ character of the j^th^ string of `words`, you **can no longer** use the x^th^ character of any string in `words` where `x <= k`. In other words, all characters to the left of or at index `k` become unusuable for every string. * Repeat the process until you form the string `target`. **Notice** that you can use **multiple characters** from the **same string** in `words` provided the conditions above are met. Return *the number of ways to form* `target` *from* `words`. Since the answer may be too large, return it **modulo** 10^9^ + 7. ### 範例 **Example 1:** ``` Input: words = ["acca","bbbb","caca"], target = "aba" Output: 6 Explanation: There are 6 ways to form target. "aba" -> index 0 ("acca"), index 1 ("bbbb"), index 3 ("caca") "aba" -> index 0 ("acca"), index 2 ("bbbb"), index 3 ("caca") "aba" -> index 0 ("acca"), index 1 ("bbbb"), index 3 ("acca") "aba" -> index 0 ("acca"), index 2 ("bbbb"), index 3 ("acca") "aba" -> index 1 ("caca"), index 2 ("bbbb"), index 3 ("acca") "aba" -> index 1 ("caca"), index 2 ("bbbb"), index 3 ("caca") ``` **Example 2:** ``` Input: words = ["abba","baab"], target = "bab" Output: 4 Explanation: There are 4 ways to form target. "bab" -> index 0 ("baab"), index 1 ("baab"), index 2 ("abba") "bab" -> index 0 ("baab"), index 1 ("baab"), index 3 ("baab") "bab" -> index 0 ("baab"), index 2 ("baab"), index 3 ("baab") "bab" -> index 1 ("abba"), index 2 ("baab"), index 3 ("baab") ``` **Constraints**: * 1 <= `words.length` <= 1000 * 1 <= `words[i].length` <= 1000 * All strings in `words` have the same length. * 1 <= `target.length` <= 1000 * `words[i]` and `target` contain only lowercase English letters. ### 解答 ### Reference [回到題目列表](https://hackmd.io/@Marsgoat/leetcode_every_day)