当前位置: 首页 > news >正文

子序列相关题目总结

1. 一维dp数组

不连续–最长递增子序列

特点:递增+不连续的子序列
思路:每个节点的dp[i]取决于该节点前边所有节点的状态,前边比它小的节点的最大dp[i] 再加 1
(故使用两层循环)

连续–最长连续递增序列

特点:递增+连续的子序列
思路:每个节点的dp[i]只取决于前一个节点的状态,如果当前节点的dp[i] > dp[i - 1],则直接加1;否则重置为1(一层循环即可)

最大子序和

思路:每个节点只有两个状态:加上/不加,如果加上更大就加,否则就自己做头

2. 二维dp数组

连续–最长重复子数组

特点:两个数组 + 连续重复
思路:使用二维dp数组(小技巧:把dp数组多设置一圈–多头一行和头一列),因为是连续重复,所以可以只记录相等情况即可

不连续–最长公共子序列

特点:两个数组 + 不连续重复
思路:跟连续–最长重复子数组的区别是:也必须记录不相等的情况,因为需要延续状态。当不相等时,就看左边和上边哪个大即可
变形:不相交的线,他们本质都是找一个有序的相同子序列

距离问题(两个字符串的关系)

  1. 判断子序列:
    ① 使用双指针
    ② 动态规划
    if((s.charAt(i - 1) == t.charAt(j - 1) ) && dp[i - 1][j - 1]){
    dp[i][j] = true;
    }
    else{
    dp[i][j] = dp[i][j - 1] && dp[i - 1][j];
    }
  2. 两个字符串的删除操作
    当字符相等时:最小操作数dp[i][j] = dp[i - 1][j - 1];
    当字符不相等时:最小操作数dp[i][j]执行删除操作①删word1[i - 1],最少操作次数为dp[i - 1][j] + 1;②删word2[j - 1],最少操作次数为dp[i][j - 1] + 1;③同时删word1[i - 1]和word2[j - 1],操作的最少次数为dp[i - 1][j - 1] + 2
  3. 编辑距离
    当字符相等时:最小操作数dp[i][j] = dp[i - 1][j - 1];
    当字符不相等时:最小操作数dp[i][j]可以有三种操作:①替换–dp[i][j] = dp[i - 1][j - 1] + 1; ②删除–dp[i][j] =dp[i - 1][j] + 1;③添加–dp[i][j - 1] + 1;

回文子串

  1. 连续问题:回文子串
    这里的特点是dp数组含义、遍历顺序
    ①dp数组:二维dp数组–从i到j的子串是不是回文子串
    如果s.charAt(i) == s.charAt(j),会出现三种情况:i和j是同一个字母;i和j相连;i和j中间有字母:
 if(s.charAt(i) == s.charAt(j)){if(j - i > 1 && dp[i + 1][j - 1]){dp[i][j] = true;res++;}else if(j - i <= 1){dp[i][j] = true;res++;}}

②遍历顺序:

for(int i = len - 1; i >= 0; i--){for(int j = i; j < len; j++){ //j从i开始!!
  1. 不连续问题:最长回文子序列
    ①dp数组:二维dp数组–从i到j的回文子串的最大长度
if(s.charAt(i) == s.charAt(j)){dp[i][j] = dp[i + 1][j - 1] + 2; 
}
else{dp[i][j] = Math.max(dp[i][j - 1], dp[i + 1][j]);
}

②遍历顺序

for(int i = len - 1; i >= 0; i--){dp[i][i] = 1; //初始化for(int j = i + 1; j < len; j++){  //从i+1开始

相关文章:

  • roo code调用手搓mcp server
  • 【算法】多线程执行顺序控制(方法详解易懂版)5.27
  • 基于stm32的 永磁同步电机二电平驱动控制系统设计
  • Silvaco TCAD 2020 Windows版本安装教程
  • OpenKylin文件管理器界面层级切换问题
  • kernel版本号
  • 依赖倒置原则 (Dependency Inversion Principle, DIP)
  • 实时商品数据对接实战:唯品会 API 接口调用与详情页采集教程
  • 主键与唯一键详解:概念、区别与面试要点
  • uniapp-商城-72-shop(5-商品列表,购物车实现回顾)
  • 触觉智能RK3506星闪开发板规格书 型号IDO-EVB3506-V1
  • STM32之IIC(重点)和OLED屏
  • 开源模型应用落地-模型上下文协议(MCP)-安全认证的创新与实践探索(十)
  • Win键+R键快捷命令汇总
  • Linux 资源限制(进程级,用户级,系统级)
  • [特殊字符]《计算机组成原理》第 8 章 - CPU 的结构和功能
  • ROS2学习(15)------ROS2 TF2 机器人坐标系管理器
  • 使用硬件调试器认识arm64的四大特权级
  • WPF【11_1】WPF实战-重构与美化(Entity Framework)
  • 【网络编程】十七、多路转接之 epoll
  • wordpress主题模版在那个文件夹/浙江seo外包
  • 建网站首页图片哪里找/网站的优化和推广方案
  • 网站建设方案预算费用预算/搜索引擎大全排名
  • 购物网站建设款流程/搜索引擎营销sem包括
  • 做企业网站步骤/宁波正规seo推广
  • 网络营销最基本的应用方式是什么/金华关键词优化平台