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

392. 判断子序列

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

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

进阶:

如果有大量输入的 S,称作 S1, S2, ... , Sk 其中 k >= 10亿,你需要依次检查它们是否为 T 的子序列。在这种情况下,你会怎样改变代码?

致谢:

特别感谢 @pbrother 添加此问题并且创建所有测试用例。

示例 1:

输入:s = "abc", t = "ahbgdc"
输出:true

示例 2:

输入:s = "axc", t = "ahbgdc"
输出:false

提示:

  • 0 <= s.length <= 100
  • 0 <= t.length <= 10^4
  • 两个字符串都只由小写字符组成。
class Solution {
public:
    bool isSubsequence(string s, string t) {
        //就是最长公共子序列问题。
        if(s.size() == 0) return true;
        if(t.size() == 0) return false;
        //dp[i][j]:[0- i-1]区间得s字符串 和 [0- j-1]区间得t字符串得公共字符串最长为 有dp[i]。这里规定0- i-1,是因为跳过初始dp[0][j]和dp[i][0]这组状态
        vector<vector<int>>dp(s.size()+1,vector<int>(t.size()+1,0));

        //递推关系:如果s[i-1] == t[j-1],在上一个得基础上那么长度加一dp[i-1][j-1]+1
        //如果 != ,那么继承之前得长度。dp[i-1][j-1];

        //初始化。dp[0][0];
        for(int i = 1;i <= s.size();i++){
            for(int j = 1;j <= t.size();j++){
                if(s[i-1] == t[j-1]){
                    dp[i][j] = dp[i-1][j-1]+1;
                }
                else dp[i][j] = dp[i][j-1]; // 此处,只需考虑t[i-1] 和s[j]情况
                //比如 ace
                //比如 abc c!=e。那么可以考虑ac abc 或者 ace  ab
                if(dp[i][j] == s.size()) return true;
            }
        }
        return false;
    }
};


http://www.kler.cn/news/149679.html

相关文章:

  • 【JavaScript】3.3 JavaScript工具和库
  • 【开题报告】基于深度学习的驾驶员危险行为检测系统
  • WebSocket--1.协议解析
  • Pt100 和 Pt1000 传感器:重要事实和差异
  • 纯前端实现导入excel数据
  • 【解决视觉引导多个位置需要标定多个位置的问题】
  • C++ cmake脚本链接Boost库
  • 网关路由器双栈配置中的IPv6相关选项解析
  • 【学习记录】从0开始的Linux学习之旅——编译linux内核
  • OpenAI 画图工具 DALL E 相关分享
  • python:类中静态方法,类方法和实例方法的使用与区别
  • 拼多多刷新Q3财报纪录,大涨18%股价直逼阿里
  • 网络篇---第五篇
  • uniapp基础-教程之HBuilderX配置篇-01
  • 数据结构:哈希表讲解
  • 《大话设计模式》(持续更新中)
  • MSI Center,XBox从任务栏取消固定
  • 基于ssm亚盛汽车配件销售业绩管理系统
  • 华清远见嵌入式学习——C++——作业2
  • 蓝桥杯每日一题2023.11.28
  • vmware下ubuntu 22.04从主机复制出错
  • 【LeeCode】35.搜索插入位置
  • 【Android Gradle】之一小时 Gradle及 wrapper 入门
  • 软件工程理论与实践 (吕云翔) 第十一章: 软件编程课后习题及其答案解析
  • VirtualBox 7.0.8(虚拟机软件)
  • 数据结构 / day06 作业
  • c++基础----new
  • IDEA编译器的永久试用设置与基本使用
  • C++,请问为什么力扣题704中,取数组的长度,使用sizeof()/4在运行时候没有报错,但是提交之后报数组越界的错误呢?使用size又可以了
  • Java---多态