zoukankan      html  css  js  c++  java
  • 115. 不同的子序列

     

    给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数。

    字符串的一个 子序列 是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,"ACE" 是 "ABCDE" 的一个子序列,而 "AEC" 不是)

    题目数据保证答案符合 32 位带符号整数范围。

    示例 1:

    输入:s = "rabbbit", t = "rabbit"
    输出3
    解释:
    如下图所示, 有 3 种可以从 s 中得到 "rabbit" 的方案rabbbit
    rabbbit
    rabbbit

    示例 2:

    输入:s = "babgbag", t = "bag"
    输出5
    解释:
    如下图所示, 有 5 种可以从 s 中得到 "bag" 的方案babgbag
    babgbag
    babgbag
    babgbag
    babgbag
    

    提示:

    • 0 <= s.length, t.length <= 1000
    • s 和 t 由英文字母组成
     1 class Solution {
     2 public:
     3     int numDistinct(string t, string s) {
     4         uint64_t n = s.size();
     5         uint64_t m = t.size();
     6         // s[:i] 在t[:j] 出现的个数
     7         uint64_t dp[n+1][m+1];
     8 
     9         // s[:i] 在空字符串中出现的次数是0
    10         for(uint64_t i = 0;i < n+1; i++) {
    11             dp[i][0] = 0;
    12         }
    13         // 空字符串 在 t子序列中出现的次数1
    14         for(uint64_t j = 0; j < m+1;j++) {
    15             dp[0][j] = 1;
    16         }
    17         dp[0][0] = 1;
    18         // 空字符串 在 空字符串子序列中出现的次数1
    19 
    20         for(uint64_t i =1;i<n+1;i++) {
    21             for(uint64_t j = 1;j < m+1;j++) {
    22                 if(s[i-1]==t[j-1]) {
    23                     // 删除 t[i] s[j] 都可以删除 
    24     
    25                     dp[i][j] = dp[i-1][j-1] + dp[i][j-1];
    26                 } else {
    27                     // 删除 t[j]
    28                     dp[i][j] = dp[i][j-1];
    29                 }
    30             }
    31         }
    32 
    33 
    34         return dp[n][m];
    35     }
    36 };
  • 相关阅读:
    http和HTTPS的区别及SSL介绍
    cas系列(三)--HTTP和HTTPS、SSL
    cas系列(一)--cas单点登录基本原理
    修改cas登陆页面-服务器端
    rest例子
    RESTful 架构风格概述
    Java分布式应用技术架构介绍
    tomcat的server.xml详解
    Apache Shiro 快速入门教程,shiro 基础教程 (这篇文章非常好)
    fmt:formatDate标签的输出格式
  • 原文地址:https://www.cnblogs.com/zle1992/p/15265569.html
Copyright © 2011-2022 走看看