看长字符串S中包含多少短字符串T。

动规：count[j][i] 表示S[0:i]中有多少T[0:j]子串。不管S中第i个字符和T中第j个字符是否相同，都可以不用S中第i个字符而只用前i-1个（count[j][i] = count[j][i-1]）。 如果相同，还可以用S中第i个字符，于是再加上count[j-1][i-1]。就是说，假设S已经匹配了i - 1个字符.现在无论S[i]是不是和T[j]匹配，匹配的个数至少是count[j][i-1].除此之外，当S[i]和T[j]相等时，我们可以让S[i]和T[j]匹配，然后让S[i - 1]和T[j - 1]去匹配。得到动规递推式：
count[j][i] = (S[i]==T[j]?count[j-1][i-1]:0) + count[j][i-1]
滚动数组：二维数组空间利用率太低，考虑到count[j][i]只与count[j][i-1]和count[j-1][i-1]有关二维数组可以转化成两个一维数组precount[]和curcount[]。curcount[j]=(S[i]==T[j]?precount[j-1]:0) + precount[j]， precount=curcount. 进一步可以把两个数组合并成一个curcount[j]=(S[i]==T[j]?curcount[j-1]:0) + curcount[j]。但是j要从尾到头扫描以防重复。