给你三个字符串 word1、word2 和 target。
你的任务是计算从 word1 和 word2 中选择字符以形成 target 的方案数,需满足以下条件:
target 中的每个字符,从 word1 或 word2 中选择一个匹配的字符。word1 中选择的下标必须是 严格 递增的。word2 中选择的下标必须是 严格 递增的。word1 和 word2 两者 中 至少 各选择一个字符。如果对于 target 中的 至少 一个位置,选择的字符来自不同的字符串或不同的下标,则认为两种方案是不同的。
返回方案数。由于答案可能非常大,请返回它对 109 + 7 取余 后的结果。
示例 1:
输入: word1 = "abc", word2 = "bac", target = "abc"
输出: 5
解释:
有 5 种形成 target 的方案:
word1[0] = 'a', word1[1] = 'b', word2[2] = 'c'word1[0] = 'a', word2[0] = 'b', word1[2] = 'c'word1[0] = 'a', word2[0] = 'b', word2[2] = 'c'word2[1] = 'a', word1[1] = 'b', word1[2] = 'c'word2[1] = 'a', word1[1] = 'b', word2[2] = 'c'所有方案都保持了每个字符串内部递增的下标顺序,并且从每个字符串中至少选择了一个字符。
示例 2:
输入: word1 = "cd", word2 = "cd", target = "ccd"
输出: 4
解释:
有 4 种形成 target 的方案:
word1[0] = 'c', word2[0] = 'c', word1[1] = 'd'word1[0] = 'c', word2[0] = 'c', word2[1] = 'd'word2[0] = 'c', word1[0] = 'c', word1[1] = 'd'word2[0] = 'c', word1[0] = 'c', word2[1] = 'd'target 中的前两个 'c' 字符必须分别来自两个字符串。最后一个 'd' 可以从任意一个字符串中选择。
示例 3:
输入: word1 = "xy", word2 = "xy", target = "xyxy"
输出: 2
解释:
有 2 种形成 target 的方案:
word1[0] = 'x', word1[1] = 'y', word2[0] = 'x', word2[1] = 'y'word2[0] = 'x', word2[1] = 'y', word1[0] = 'x', word1[1] = 'y'target 中的每个 "xy" 部分完全来自同一个字符串。
示例 4:
输入: word1 = "ab", word2 = "cde", target = "ace"
输出: 1
解释:
唯一的方案是选择 word1[0] = 'a'、word2[0] = 'c' 和 word2[2] = 'e'。因此,答案为 1 。
提示:
1 <= word1.length, word2.length, target.length <= 100word1、word2 和 target 仅由小写英文字母组成。