字符串--子串匹配
- 其他
- 2025-09-14 19:45:01

下面给出了子串匹配问题的模板,预处理结束后的代码根据题意编写
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; } }横坐标的每个点代表一个字母
 
               
               
               
               
               
               
               
   
   
   
   
   
   
   
   
   
   
  