主页 > 其他  > 

字符串--子串匹配

字符串--子串匹配

下面给出了子串匹配问题的模板,预处理结束后的代码根据题意编写

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; else f[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; } }

横坐标的每个点代表一个字母 

标签:

字符串--子串匹配由讯客互联其他栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“字符串--子串匹配