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

动态规划---判断子序列

题目:

给定字符串 st ,判断 s 是否为 t 的子序列。

字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace""abcde"的一个子序列,而"aec"不是)。

思路:本题与最长公共子序列思路基本一致,只是在处理两字符串字符不一致时有点改变

1.确定dp数组及含义

dp[i][j]代表[0,i-1]长度的字符串s,[0.j-1]长度的字符串t的最长公共子序列

2.确定递推公式

如果s[i-1]=t[j-1],那么找到了一个公共元素,dp[i][j]=dp[i-1][j-1]+1

如果s[i-1]!=t[j-1],那么将t回退(这就是两题的不同之处),dp[i][j]=dp[i][j-1]

3.初始胡dp数组

所有元素初始化为0

4.确定遍历顺序

外层for循环遍历字符串s,内层for循环遍历字符串t,从小到大遍历

代码:

    public boolean isSubsequence(String s, String t) {int len1=s.length();int len2=t.length();int[][] dp=new int[len1+1][len2+1];for(int i=1;i<=len1;i++){for(int j=1;j<=len2;j++){if(s.charAt(i-1)==t.charAt(j-1)){dp[i][j]=dp[i-1][j-1]+1;}else{dp[i][j]=dp[i][j-1];}}}if(dp[len1][len2]==len1)return true;elsereturn false;}


http://www.mrgr.cn/news/27934.html

相关文章:

  • FPGA 第6讲 简单组合逻辑多路选择器
  • C语言 | Leetcode C语言题解之第560题和为K的子数组
  • 【JavaEE进阶】Spring 事务和事务传播机制
  • 打造透明、高效的分布式系统:通过 EMQX ECP 集成实现链路追踪功能
  • 免费送源码:Java+Springboot+MySQL Springboot多租户博客网站的设计 计算机毕业设计原创定制
  • 数据结构——快速排序
  • 七、排序-算法总结
  • 日志工具类
  • Linux——应用层自定义协议与序列化
  • 【30天玩转python】装饰器与闭包
  • 光伏板热斑缺陷检测数据集
  • 浮点数在内存中的存储详解(超详细)
  • JavaScript高级——循环遍历加监听
  • PointNet++改进策略 :模块改进 | PointNetXt ,利用训练测量大幅提升PointNet模型性能
  • 如何迈向IT行业的成功之路
  • 智能机巢+无人机:自动化巡检技术详解
  • redisson实现分布式锁
  • 基于yolov5的混凝土缺陷检测系统python源码+onnx模型+评估指标曲线+精美GUI界面
  • 文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《考虑生产环节内特性的工业负荷调峰优化运行及二次调频能力评估 》
  • 建筑裂缝检测图像ai模型训练数据集
  • 利用Python在Win10环境下实现拨号上网
  • PHP环境搭建
  • 解码 OpenAI 的 o1 系列大型语言模型
  • Linux查看自己公网IP
  • java 网络编程URL与URLConnection的使用
  • AIGC实战——多模态模型Flamingo