leetcode 115不同的子序列
2024-09-20 04:15:30
滚动数组:
/*****
下标从1开始
dp[i][j]:= numbers of subseq of S[1:j] equals T[1:i]
if(s[j]==t[i]):(那么之后的子串可以是是dp[i-1][j-1](match) 或dp[i][j-1] (not match))
dp[i][j]=dp[i-1][j-1]+
dp[i][j-1];
if(t[i]!=s[j]):
dp[i][j]=dp[i][j-1]; 初始化:
dp[0][*]=0 时间:O(n2) 空间O(n2)
使用滚动数组:
O(n)空间: *****/ class Solution {
public:
int numDistinct(string s, string t) {
int ls=s.length(),lt=t.length();
vector<long> dp(ls+,);
for(int i=;i<=lt;i++){
int pre=dp[],cur;
dp[]=;
for(int j=;j<=ls;j++){
cur=dp[j];
if(s[j-]==t[i-])
dp[j]=pre+dp[j-];
else
dp[j]=dp[j-];
pre=cur;
//cout<<dp[j]<<" ";
}
//cout<<endl;
}
return dp[ls];
}
};
/*****
下标从1开始
dp[i][j]:= numbers of subseq of S[1:j] equals T[1:i]
if(s[j]==t[i]):(那么之后的子串可以是是dp[i-1][j-1](match) 或dp[i][j-1] (not match))
dp[i][j]=dp[i-1][j-1]+
dp[i][j-1];
if(t[i]!=s[j]):
dp[i][j]=dp[i][j-1]; 初始化:
dp[0][*]=0 时间:O(n2) 空间O(n2)
使用滚动数组:
O(n)空间: *****/ class Solution {
public:
int numDistinct(string s, string t) {
int ls=s.length(),lt=t.length();
vector<vector<long>> dp(lt+,vector<long>(ls+));
fill(begin(dp[]),end(dp[]),);
for(int i=;i<=lt;i++){
for(int j=;j<=ls;j++){
if(s[j-]==t[i-])
dp[i][j]=dp[i-][j-]+dp[i][j-];
else
dp[i][j]=dp[i][j-];
//cout<<dp[i][j]<<" ";
}
//cout<<endl;
}
return dp[lt][ls];
}
};
最新文章
- Codeforces Round #161 (Div. 2)
- 使用JMeter进行负载测试——终极指南
- android 常用小功能(第二版)
- 验证控件插图扩展控件ValidatorCalloutExtender(用于扩展验证控件)和TextBoxWatermarkExtender
- android136 360 拖拽
- Codeforces 552E - Vanya and Brackets【表达式求值】
- 字符串:格式化 - 零基础入门学习Python015
- Openjudge-计算概论(A)-整数奇偶排序
- oracle那些基本知识
- greenplum集群某台机器磁盘占用100%处理方式
- Python高级笔记(四) -- 多继承_方法解析顺序表MRO
- unittest框架(惨不忍睹低配版)
- IT设备服务监控的方法论
- LeetCode 696 Count Binary Substrings 解题报告
- MySQL Backup mysqldump 常用选项与主要用法
- MT【14】最大最小问题变形
- Winform 事件
- RabbitMQ.Client API (.NET)中文文档
- HTML5 web 存储
- 问答项目---用户注册的那些事儿(PHP验证)