网站建设的基础知识河南网站建站推广
下面给出了子串匹配问题的模板,预处理结束后的代码根据题意编写
dp
预处理目的:得到26个字母在字符串t中首次出现的位置
数组元素表示从从位置 i 开始往后字符 j 第一次出现的位置
class Solution {public boolean isSubsequence(String s, String t) {int n = s.length(), m = t.length();int[][] f = new int[m + 1][26];for (int i = 0; i < 26; i++) {f[m][i] = m;}for (int i = m - 1; i >= 0; i--) {for (int j = 0; j < 26; j++) {if (t.charAt(i) == j + 'a')f[i][j] = i;elsef[i][j] = f[i + 1][j];}}
//----------------------------预处理结束,现在26个字母在t的位置已经存进数组int add = 0;for (int i = 0; i < n; i++) {
//f中a是下标0,b是下标1……,所以s中取出的字母,想转化成f中对应的下标,要 - 'a'if (f[add][s.charAt(i) - 'a'] == m) {return false;}add = f[add][s.charAt(i) - 'a'] + 1;}return true;}
}
横坐标的每个点代表一个字母