题目大意: 给定你一个字符串,然后在给你一个这个字符串的子序列, 然后问你最短子字符串的最小长度是多少才能把子序列给包含进去, n=1e6, 子序列=100;
思路:
- 为了让他最短, 首尾靠齐嘛, 按前到后推时, 就选合法的首位在后面.
- 遇事不决, DP
- dp[i][j], j 是子序列的第几个, 然后这个dp值保存 合法的越靠近后面的首字母在哪里, 遇到末尾字母更新一下
- 但 s1[i]==s2[j] 时 且不是首尾字母时 dp[j]=dp[j-1]; 前面第一维度不用管, 可以滚动掉 是首字母就更新 dp[j]=i;