{leetcode}/problems/number-of-ways-to-form-a-target-string-given-a-dictionary/[LeetCode - 1639. 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
ith
character (0-indexed) oftarget
, you can choose thekth
character of thejth
string inwords
iftarget[i] = words[j][k]
. -
Once you use the
kth
character of thejth
string ofwords
, you can no longer use thexth
character of any string inwords
wherex ⇐ k
. In other words, all characters to the left of or at indexk
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 `109 + 7
.
Example 1:
Input: words = ["acca","bbbb","caca"], target = "aba" Output: 6 Explanation: There are 6 ways to form target. "aba" -> index 0 ("a#cca"), index 1 ("b[.underline]#b#bb"), index 3 ("cac[.underline]#a") "aba" -> index 0 ("a#cca"), index 2 ("bb[.underline]#b#b"), index 3 ("cac[.underline]#a") "aba" -> index 0 ("a#cca"), index 1 ("b[.underline]#b#bb"), index 3 ("acc[.underline]#a") "aba" -> index 0 ("a#cca"), index 2 ("bb[.underline]#b#b"), index 3 ("acc[.underline]#a") "aba" -> index 1 ("c[.underline]a#ca"), index 2 ("bb[.underline]#b#b"), index 3 ("acc[.underline]#a") "aba" -> index 1 ("c[.underline]a#ca"), index 2 ("bb[.underline]#b#b"), index 3 ("cac[.underline]#a")
Example 2:
Input: words = ["abba","baab"], target = "bab" Output: 4 Explanation: There are 4 ways to form target. "bab" -> index 0 ("b#aab"), index 1 ("b[.underline]#a#ab"), index 2 ("ab[.underline]#b#a") "bab" -> index 0 ("[.underline]#b#aab"), index 1 ("b[.underline]#a#ab"), index 3 ("baa[.underline]#b") "bab" -> index 0 ("b#aab"), index 2 ("ba[.underline]#a#b"), index 3 ("baa[.underline]#b") "bab" -> index 1 ("a[.underline]b#ba"), index 2 ("ba[.underline]#a#b"), index 3 ("baa[.underline]#b")
Constraints:
-
1 ⇐ words.length ⇐ 1000
-
1 ⇐ words[i].length ⇐ 1000
-
All strings in
words
have the same length. -
1 ⇐ target.length ⇐ 1000
-
words[i]
andtarget
contain only lowercase English letters.