首页 > 编程语言 >代码随想录算法训练营第四十一天| 1143.最长公共子序列 1035.不相交的线 53. 最大子序和

代码随想录算法训练营第四十一天| 1143.最长公共子序列 1035.不相交的线 53. 最大子序和

时间:2023-08-01 23:33:30浏览次数:40  
标签:1143 随想录 最长 第四十一 result 跳过 节点 dp

1143.最长公共子序列  

要求:

可以跳过,找出来最长符合的节点

难点:

如何跳过了之后仍然保留之前的值

思路:

如果不符,并不是dp[i-1][j-2]等于之前的值,而是dp[i][j] 等于它的相关节点

以上很重要

代码 :

 1 // 要求: 两个子数组,可以删减跳过,找出最长的长度
 2 // 思路:dp[n][m] 代表第n-1 m-1的重复长度
 3 // 因为个别字节可以跳过,不可以+1,再加一个数组
 4 // 遍历dp[n][m] = dp[n][m-1]
 5 // 
 6 // 可以删减,之前的思路:
 7 //    1,dp[n]以N为结尾,然后遍历0-n有没有一样的节点,然后放进去
 8 // 
 9 // 思路:
10 //    1,如果当前节点相等,那么找到上一个节点中最大的值,在后面+1
11 // 
12 // 新思路: (如何跳过节点)
13 // 如果不满足, dp[i][j] = max(dp[i-1][j],dp[i][j-1]) 向左和上,保持一致
14 //
15 int longestCommonSubsequence(string text1, string text2) {
16     int result = 0;
17 
18     vector<vector<int>> dp(text1.size() + 1, vector<int>(text2.size() + 1, 0));
19 
20     for (int i = 1; i <= text1.size(); i++)
21     {
22         for (int j = 1; j <= text2.size(); j++)
23         {
24             if (text1[i - 1] == text2[j - 1])
25             {
26                 dp[i][j] = dp[i - 1][j - 1] + 1;
27             }
28             else
29             {
30                 dp[i][j] = max(dp[i][j - 1], dp[i - 1][j]);
31             }
32 
33             result = result > dp[i][j] ? result : dp[i][j];
34         }
35     }
36 
37     return result;
38 }

 

标签:1143,随想录,最长,第四十一,result,跳过,节点,dp
From: https://www.cnblogs.com/smartisn/p/17599446.html

相关文章

  • 代码随想录算法训练营第五天|力扣242.有效的字母异位词、力扣242.两个数组的交集、力
    哈希表哈希表理论基础哈希表,又称为散列表(HashTable),是根据关键码的值而直接进行访问的数据结构其中,数组就是一张哈希表;表中关键码就是数组的索引下标,然后通过下标直接访问数组中的元素哈希表解决的问题:一般哈希表都是用来快速判断一个元素是否出现在集合中哈希函数:把学生的......
  • 代码随想录算法训练营第三天| LeetCode 242.有效的字母异位词 349. 两个数组的交集
    242.有效的字母异位词    卡哥建议: 这道题目,大家可以感受到数组用来做哈希表给我们带来的遍历之处。    题目链接/文章讲解/视频讲解: https://programmercarl.com/%E5%93%88%E5%B8%8C%E8%A1%A8%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html   做题思路:......
  • [代码随想录]Day05-哈希表 part01
    题目:242.有效的字母异位词思路:很简单,就是看两个字符串每个字母出现的次数是不是相同的。可以用两个数组来比较,也可以用一个数组比较。代码:一个数组funcisAnagram(sstring,tstring)bool{isExist:=[26]int{}//26个字母for_,ch:=ranges{isE......
  • 代码随想录-哈希表-c++总结
    哈希表内容整体简单,关键是要有利用map映射的思想,以及巩固一些c++标准库的操作这次三数之和一题没有直接做出来,关键在于如何查重一点比较绕15.三数之和-力扣(LeetCode)利用排序+双指针解决三数之和的思路更加清楚此外,四数之和中,四个数相加会溢出int,应改为 ......
  • 代码随想录第四天|力扣24.两两交换链表节点、力扣19.删除链表的倒数第N个结点、力扣面
    两两交换链表中的节点(力扣24.)dummyhead.next=head;cur=dummyhead;while(cur.next!=null&&cur.next.next!=null)temp=cur.next;temp1=cur.next.next.next;cur.next=cur.next.next;cur.next.next=temp;temp.next=temp1;cur=cur.next.next;returndummyhead.n......
  • 代码随想录算法训练营第四天| LeetCode 24. 两两交换链表中的节点 19.删除链表的倒
    24.两两交换链表中的节点     卡哥建议:用虚拟头结点,这样会方便很多。 本题链表操作就比较复杂了,建议大家先看视频,视频里我讲解了注意事项,为什么需要temp保存临时节点。   题目链接/文章讲解/视频讲解:https://programmercarl.com/0024.%E4%B8%A4%E4%B8%A4%E4%BA%......
  • 代码随想录算法训练营第三天|力扣203.移除链表元素、力扣707.设计链表、力扣206.反转
    链表定义:通过指针串联在一起的线性结构,每一个节点由两个部分组成:数据域和指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null,即为空指针。链表类型1.单链表2.双链表3.循环链表,即链表首尾相连,可以解决约瑟夫环问题链表的存储方式数组在内存中是连续分布的,......
  • [代码随想录]Day04-链表part02
    题目:24.两两交换链表中的节点思路:首先给他加一个虚拟头结点,然后思考反转的逻辑,这是每两个为一组,比如1,2是一组、3,4是一组,如果说1,2一组2,3一组就变成了链表的逆转了。那么指针的逻辑是:两个指针一个r指向要交换的二元组的第一个节点一个l指向前一个节点二元组的第二个节......
  • [代码随想录]Day03-链表part01
    题目:203.移除链表元素思路:做链表首先最好有个虚拟头指针,这样做删除添加操作的时候可以统一操作否则还得特判。那删除元素的过程,从虚拟头指针开始要做以下几步:如果当前p的next不为空,那么就可以进行判断如果p的next的值是val(↑p的next不为空↑),那么就把p的next修改为p的下......
  • 代码随想录算法训练营第三天| LeetCode 203.移除链表元素(同时也对整个单链表进行增删
    203.移除链表元素      题目链接/文章讲解/视频讲解::https://programmercarl.com/0203.%E7%A7%BB%E9%99%A4%E9%93%BE%E8%A1%A8%E5%85%83%E7%B4%A0.html    卡哥题目建议:本题最关键是要理解虚拟头结点的使用技巧,这个对链表题目很重要。   做题思路:   ......