115. 不同的子序列
动态规划
设f(i, j)
是s[0...i)
中t[0...j]
匹配到的个数
Base:
当t为空时,s总能成功匹配t
转移方程:
当
s[i] == t[j]
时s[i]
让自己和t[j]
匹配:那么f(i + 1, j + 1)
的值就包括了f(i, j)
s[i]
不让自己和t[j]
匹配:那么对于s[0...i+1)
来说,因为没有匹配,所以f(i + 1, j + 1)
的值就包括f(i, j + 1)
,就是让前面s[0...i)
去和t[0...j + 1)
匹配
当
s[i] != t[j]
时只能由前面的字符串去和
t[0...i + 1)
尝试匹配了。
所以最终的递推方程也由此得到。
1 | class Solution { |