1143.最长公共子序列
解题思路
代码实现
var longestCommonSubsequence = function(text1, text2) {
var dp = new Array(text1.length+1).fill().map(()=>new Array(text2.length+1).fill(0));
var arr1 = text1.split('');
var arr2 = text2.split('');
for(let i=1;i<=arr1.length;i++){
for(let j=1;j<=arr2.length;j++){
if(arr1[i-1] === arr2[j-1]){
dp[i][j] = dp[i-1][j-1] +1;
}else{
dp[i][j] = Math.max(dp[i][j-1],dp[i-1][j]);
}
}
}
return dp[arr1.length][arr2.length];
};
1035.不相交的线
解题思路
本质上就是求最长公共子序列
代码实现
var maxUncrossedLines = function(nums1, nums2) {
var dp = new Array(nums1.length+1).fill().map(()=>new Array(nums2.length+1).fill(0));
for(let i=1;i<=nums1.length;i++){
for(let j=1;j<=nums2.length;j++){
if(nums1[i-1] === nums2[j-1]){
dp[i][j] = dp[i-1][j-1] +1;
}else{
dp[i][j] = Math.max(dp[i][j-1],dp[i-1][j]);
}
}
}
return dp[nums1.length][nums2.length];
};
53. 最大子序和
解题思路
代码实现
var maxSubArray = function(nums) {
var result =-Infinity;
var count =0;
for(let i=0;i<nums.length;i++){
count += nums[i];
if(count>result) result = count;
if(count < 0) count = 0;
}
return result;
};
var maxSubArray = function(nums) {
var dp = new Array(nums.length);
dp[0] = nums[0];
for(let i=1;i<nums.length;i++){
dp[i] =Math.max(dp[i-1] +nums[i],nums[i])
}
var result =-Infinity;
for(let i=0;i<nums.length;i++){
if(dp[i]>result){
result = dp[i];
}
}
return result;
};
392.判断子序列
解题思路
本质上就是求最长公共子序列
代码实现
var isSubsequence = function(s, t) {
var dp = new Array(s.length+1).fill().map(()=>new Array(t.length+1).fill(0));
var arr1 = s.split('');
var arr2 = t.split('');
for(let i=1;i<=arr1.length;i++){
for(let j=1;j<=arr2.length;j++){
if(arr1[i-1] === arr2[j-1]){
// console.log(dp[i-1][j-1])
dp[i][j] = dp[i-1][j-1] + 1;
}else{
dp[i][j] = Math.max(dp[i][j-1],dp[i-1][j]);
}
}
}
return dp[arr1.length][arr2.length] === s.length;
};