LeetCode 940 不同的子串行2

2021-10-19 21:10:59 字數 847 閱讀 3229

給定乙個字串 s,計算 s 的不同非空子序列的個數。

因為結果可能很大,所以返回答案模 10^9 + 7.

示例 1:

輸入:"abc"

輸出:7

解釋:7 個不同的子串行分別是 "a", "b", "c", "ab", "ac", "bc", 以及 "abc"。

示例 2:

輸入:"aba"

輸出:6

解釋:6 個不同的子串行分別是 "a", "b", "ab", "ba", "aa" 以及 "aba"。

示例 3:

輸入:"aaa"

輸出:3

解釋:3 個不同的子串行分別是 "a", "aa" 以及 "aaa"。

利用動態規劃解決,解決方法:官方答案

from typing import *

from collections import defaultdict

class solution:

def distinctsubseqii(self, s: str) -> int:

n = len(s)

dp = [0] * (n + 1)

dp[0] = 1

mod = int(10 ** 9 + 7)

last = defaultdict(int)

for i, c in enumerate(s):

dp[i + 1] = 2 * dp[i]

if c in last:

dp[i + 1] -= dp[last[c]]

last[c] = i

return (dp[len(s)] - 1) % mod

leetcode 不同的子串行

給定乙個字串 s 和乙個字串 t 計算在 s 的子串行中 t 出現的個數。字串的乙個 子串行 是指,通過刪除一些 也可以不刪除 字元且不干擾剩餘字元相對位置所組成的新字串。例如,ace 是 abcde 的乙個子串行,而 aec 不是 題目資料保證答案符合 32 位帶符號整數範圍 輸入 s rabbb...

leetcode 115 不同的子串行

思路 動態規劃 狀態定義 f x,y 記t中 0,x 範圍的子串為t 記s中 0,y 範圍的子串為s f x,y 表示在s 中t 出現的個數。狀態轉移 1 對於x 0的情況,a 當y 0時,如果s.charat 0 t.charat 0 則f 0,0 1 否則f 0,0 0。b 當y 0 時,如果s...

leetcode 115 不同的子串行

遞迴超時 唉 設dp i j 表示s 0 i 1 的子串行中t 0 j 1 出現的次數,則 1.若s i 1 t j 1 dp i j dp i 1 j 1 用s i 1 與t j 1 配對 dp i 1 j 拋棄s i 1 不用s i 1 與t j 1 配對 2.若s i 1 t j 1 dp i...