leetcode115 不同的子序列
给定一个字符串 S 和一个字符串 T,计算在 S 的子序列中 T 出现的个数。
一个字符串的一个子序列是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,"ACE" 是 "ABCDE" 的一个子序列,而 "AEC" 不是)
示例 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
^^^
思路:
动态规划
dp[i][j] 代表 T 前 i 字符串可以由 S j 字符串组成最多个数.
所以动态方程:
当 S[j] == T[i] , dp[i][j] = dp[i-1][j-1] + dp[i][j-1];
当 S[j] != T[i] , dp[i][j] = dp[i][j-1]
class Solution {public int numDistinct(String s, String t) {int[][] dp = new int[t.length() + 1][s.length() + 1];for (int j = 0; j < s.length() + 1; j++) dp[0][j] = 1;for (int i = 1; i < t.length() + 1; i++) {for (int j = 1; j < s.length() + 1; j++) {if (t.charAt(i - 1) == s.charAt(j - 1)) dp[i][j] = dp[i - 1][j - 1] + dp[i][j - 1];else dp[i][j] = dp[i][j - 1];}}return dp[t.length()][s.length()];}
}
leetcode115 不同的子序列相关推荐
- leetcode115. 不同的子序列
一:题目 二:代码 class Solution {public:/**思路:动规分析走一波1>:确定dp数组以及下标的含义dp[i][j] 表示的是 以下标i-1结尾的子序列s中出现以j-1结 ...
- 【大总结3】leetcode解题总览(算法、剑指offer、SQL、多线程、shell)
3/22更新 剑指offer 题目链接 建议大部分题都会做,都能比较快速且准确的写出来.关于做题方式,我的建议是:一道一道刷即可,因为难度一般,不用系统的学习什么知识,遇到实在不会的就跳过即可. 我这 ...
- LeetCode算法题整理(200题左右)
目录 前言 一.树(17) 1.1.后序遍历 1.2.层次遍历 1.3.中序 1.4.前序 二.回溯(20) 2.1.普通回溯 2.2.线性回溯:组合.排列.子集.分割 2.3.矩阵回溯 三.二分查找 ...
- leetcode解题总览
3/22更新 剑指offer 题目链接 建议大部分题都会做,都能比较快速且准确的写出来.关于做题方式,我的建议是:一道一道刷即可,因为难度一般,不用系统的学习什么知识,遇到实在不会的就跳过即可. 我这 ...
- 【代码随想录】-动态规划专题
文章目录 理论基础 斐波拉契数列 爬楼梯 使用最小花费爬楼梯 不同路径 不同路径 II 整数拆分 不同的二叉搜索树 背包问题--理论基础 01背包 二维dp数组01背包 一维数组(滚动数组) 装满背包 ...
- Leetcode动态规划专题(共38道)
某一问题有很多重叠子问题 每一状态一定由上一状态推导出来 而贪心没有状态推导,而是直接选局部最优 解决方式: 确定dp数组(dp table)以及下标的含义 确定递推公式 dp数组如何初始化 确定遍历 ...
- 【精品计划1】动态规划入门到熟悉,看不懂来打我啊
持续更新...... 2.1斐波那契系列问题 2.2矩阵系列问题 2.3跳跃系列问题 3.1 01背包 3.2 完全背包 3.3多重背包 3.4 一些变形选讲 2.1斐波那契系列问题 在数学上,斐波纳 ...
- 动态规划入门到熟悉,看不懂来打我啊
动态规划入门到熟悉,看不懂来打我啊 兔子hebtu666 本文链接:https://blog.csdn.net/hebtu666/article/details/100585136 2.1斐波那契系列 ...
- LeetCode简单题之最长和谐子序列
题目 和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 1 . 现在,给你一个整数数组 nums ,请你在所有可能的子序列中找到最长的和谐子序列的长度. 数组的子序列是一个由数组派生出来的 ...
最新文章
- 朱哥研究出来的分页控件
- 实用手册:11种常见滤镜及使用效果
- 清除vc6工程中的vss
- PHP的chunk_split() 函数把字符串分割为一连串更小的部分
- WPF ClickOnce应用程序IIS部署发布攻略
- 建议收藏!数据中台行业发展概况及展望
- 【Flink】flink 升级 the given -yarn-cluster does not contain a valid port
- netty大白话--字符串的收发(三)
- Unity 3D中 Ulua-UGUI简单的Demo——热更新的具体流程、使用说明
- linux 命令行美化
- dev grdicontrol 根据条件改变行颜色,字体颜色等
- 直播特效的实现原理与难点
- JS 获取某一年有多少周
- android 相机自动延时拍照软件,延时摄影大师app下载-延时摄影大师 安卓版v3.0-PC6安卓网...
- v4l2架构专题模块handler分析 --- handler的初始化及handler ctrl注册
- 2019世界人工智能大会
- 线性表的顺序存储结构——顺序表
- 小福利,用excel制作旋风图,小狗图和漏斗图
- python水果超市管理系统_项目1-水果超市管理系统-学生
- mybatis-plus QueryWrapper 添加limit
热门文章
- python编程口诀_少儿Python编程中的算术与技巧
- wireshark分析SIP协议——注册
- DOC学习之TrueFFS
- WinCE控制面板添加应用程序
- oracle用户获取datameta权限,Oracle数据库提权(低权限提升至dba)
- python书籍排行榜前十名_学习Python,这些书你看过几本?
- 【转】进阶 JavaScript 必知的 33 个点【进阶必备】
- 【转】数据库软考笔记(一)第一章 计算机硬件基础知识笔记总结
- 【转】VS TFS源码分析软件PATFS使用方法一:配置团队项目
- java synchronized 关键字(1)对象监视器为Object