• 判断子序列


    题源:leetcode

    链接:https://leetcode-cn.com/problems/is-subsequence/

    使用双指针法很简单,而且运行效率也很高。这里不贴代码了,学习一下动态规划的解法;

     1   //dp解法
     2     bool isSubsequence(string s, string t){
     3         int n = s.length(),m = t.length();
     4         //dp数组dp[i][j]表示字符串t以i位置开始第一次出现字符j的位置
     5         vector<vector<int>> dp(m + 1,vector<int> (26,0));
     6 
     7         //初始化边界条件,dp[i][j] = m表示t中不存在字符j
     8         for(int i=0;i<26;i++){
     9             dp[m][i] = m;
    10         }
    11 
    12         //从后往前递推初始化dp数组
    13         for(int i = m - 1;i>=0;i--) {
    14             for(int j=0;j<26;j++){
    15                 if(t[i] == 'a' + j){
    16                     dp[i][j] = i;
    17                 }else {
    18                     dp[i][j] = dp[i + 1][j];
    19                 }
    20             }
    21         }
    22 
    23         int add = 0;
    24         for(int i = 0;i<n;i++){
    25             //t中没有s[i] 返回false
    26             if(dp[add][s[i] - 'a'] == m){
    27                 return false;
    28             }
    29             //否则直接跳到t中s[i]第一次出现的位置之后一位
    30             add = dp[add][s[i] - 'a'] + 1;
    31         }
    32         return true;
    33     }
  • 相关阅读:
    HTML5 表单自学记录
    HTML5表单
    HTML不常用的表单属性-fieldset
    HTML5-Y音频与视频
    解决HTML5标签兼容的办法搜集
    HTML5标签的兼容处理
    HTML5-语义化标签
    JS自学大全
    HTML5增强的表单
    照片格式的区别
  • 原文地址:https://www.cnblogs.com/hosheazhang/p/15070391.html
Copyright © 2020-2023  润新知