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

LeetCode 392. 判断子序列 java题解

https://leetcode.cn/problems/is-subsequence/description/
转化为最长公共子序列问题。求[lens][j]的公共子序列长度是否为lens。

class Solution {
    //s属于t,lens<=lent
    public boolean isSubsequence(String s, String t) {
        int lens=s.length(),lent=t.length();
        if(s.length()==0) return true;
        if(lent<lens) return false;
        int[][] dp=new int[lens+1][lent+1];
        //[i][j]:前i个,[0,i-1]。求[lens][j]的公共子序列长度是否为lens
        //初始化:i为0或者j为0。公共子序列长度都为0
        //转化为最长公共子序列问题
        for(int i=1;i<=lens;i++){
            for(int j=1;j<=lent;j++){
                if(s.charAt(i-1)==t.charAt(j-1)){
                    dp[i][j]=dp[i-1][j-1]+1;
                }else{
                    dp[i][j]=Math.max(dp[i-1][j],dp[i][j-1]);
                }
                if(i==lens&&dp[i][j]==lens){
                    return true;
                }
            }
        }
        return false;
    }
}

这道题应该算是编辑距离的入门题目,因为从题意中我们也可以发现,只需要计算删除的情况,不用考虑增加和替换的情况。
if (s[i - 1] == t[j - 1])
t中找到了一个字符在s中也出现了
if (s[i - 1] != t[j - 1])
相当于t要删除元素,继续匹配

本题 如果删元素一定是字符串t,而 1143.最长公共子序列 是两个字符串都可以删元素。

class Solution {
    public boolean isSubsequence(String s, String t) {
        int len1=s.length();
        int len2=t.length();
        int i=0,j=0;
        int count=0;//=len1
        while(i<len1&&j<len2){
            char c1=s.charAt(i);
            char c2=t.charAt(j);
            /*while(c1=c2&&i<len1&&j<len2){
                count++;

            }*/
            if(c1==c2){
                count++;
                i++;
                j++;
            }
            else{
                j++;
            }
        }
        return count==len1?true:false;
    }
}

http://www.kler.cn/a/591729.html

相关文章:

  • 在 Ubuntu 中配置 NFS 共享服务的完整指南
  • C++ —— 线程同步(互斥锁)
  • OpenCV图像拼接(1)概述
  • 【Vue3+Vite指南】全局引入SCSS文件后出现Undefined mixin?一招解决命名空间陷阱!
  • 机器视觉工程师如何学习C#通讯
  • Flask实时监控:打造智能多设备在线离线检测平台(升级版)
  • 移动版 Edge :插件安装功能全面指南
  • SpringBoot-MVC配置类与 Controller 的扫描
  • 【Java】链表(LinkedList)(图文版)
  • QT学习笔记1
  • c语言笔记 存储期
  • 【实习经历Two:参与开源项目,学习并应用Git】
  • 解决qt中自定插件加载失败,不显示问题。
  • 报数游戏/补种未成活胡杨[E卷-hw_od]
  • HTML 新手入门:从零基础到搭建第一个静态页面(二)
  • 将温度预测的神经网络部署到服务器端,封装成api接口步骤
  • 高级java每日一道面试题-2025年3月04日-微服务篇[Eureka篇]-Eureka是什么?
  • Blender-MCP服务源码2-依赖分析
  • 再学:函数可见性、特殊函数、修饰符
  • ArcGIS Pro 制作风台路径图:从数据到可视化