目录
LeetCode1143 最长公共子序列
/*
* @lc app=leetcode.cn id=1143 lang=cpp
*
* [1143] 最长公共子序列
*/
// @lc code=start
#include<iostream>
#include<vector>
#include<string>
using namespace std;
class Solution {
public:
int longestCommonSubsequence(string text1, string text2) {
int n=text1.size();
int m=text2.size();
text1=text1;
text2=text2;
vector<vector<int>> dp(n+1,vector<int>(m+1));
//dp[i][j]表示text1的前i个字符(0到i-1)和text2的前j个字符最长公共子序列的长度
for(int i=0;i<=n;i++){
dp[i][0]=0;
}
for(int j=0;j<=m;j++){
dp[0][j]=0;
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(text1[i]==text2[j]){
dp[i+1][j+1]=dp[i][j]+1;
}
else{
dp[i+1][j+1]=max(dp[i+1][j],dp[i][j+1]);
}
}
}
return dp[n][m];
}
};
时间复杂度:O(nm)
空间复杂度:O(nm)
LeetCode1035 不相交的线
/*
* @lc app=leetcode.cn id=1035 lang=cpp
*
* [1035] 不相交的线
*/
// @lc code=start
#include<iostream>
#include<vector>
using namespace std;
class Solution {
public:
int maxUncrossedLines(vector<int>& nums1, vector<int>& nums2) {
int n=nums1.size();
int m=nums2.size();
vector<vector<int>> dp(n+1,vector<int>(m+1,0));
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(nums1[i]==nums2[j]){
dp[i+1][j+1]=dp[i][j]+1;
}
else{
dp[i+1][j+1]=max(dp[i+1][j],dp[i][j+1]);
}
}
}
return dp[n][m];
}
};