zoukankan      html  css  js  c++  java
  • 刷题-力扣-392. 判断子序列

    392. 判断子序列

    题目链接

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/is-subsequence/
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    题目描述

    给定字符串 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
    • 两个字符串都只由小写字符组成。

    题目分析

    1. 根据题目描述判断s是否是t的子序列
    2. 使用动态规划的思想,若s的前i位是t前j位的子序列,则s前i位一定是t前j+k(k>=0)位的子序列
    3. 若s的前i位恰好是t前j位的子序列(s[i-1]=t[j-1]),要使s前i+1位是t前j+1位的子序列,即要有s[i+1]=t[j+1]
    4. 边界条件,s.length() <= t.length()

    代码

    class Solution {
    public:
        bool isSubsequence(string s, string t) {
            int sLen = s.length();
            int tLen = t.length();
            if (sLen > tLen) return false;
            if (sLen == 0) return true;
            vector<vector<bool>> dp(sLen, vector<bool>(tLen, false));
            for (int i = 0; i < sLen; ++i) {
                for (int j = i; j < tLen; ++j) {
                    if (i - 1 < 0) {
                        if (j - 1 < 0) {
                            if (s[i] == t[j]) dp[i][j] = true;
                        } else {
                            if (dp[i][j - 1] || (!dp[i][j - 1] && s[i] == t[j])) dp[i][j] = true;
                        }
                    } else {
                        if (dp[i][j - 1]) {
                            dp[i][j] = true;
                        } else {
                            if (dp[i - 1][j - 1] && s[i] == t[j]) dp[i][j] = true;
                        }
                    }
                }
            }
            return dp[sLen - 1][tLen - 1];
        }
    };
    
  • 相关阅读:
    83. Remove Duplicates from Sorted List
    35. Search Insert Position
    96. Unique Binary Search Trees
    94. Binary Tree Inorder Traversal
    117. Populating Next Right Pointers in Each Node II
    116. Populating Next Right Pointers in Each Node
    111. Minimum Depth of Binary Tree
    169. Majority Element
    171. Excel Sheet Column Number
    190. Reverse Bits
  • 原文地址:https://www.cnblogs.com/HanYG/p/14747473.html
Copyright © 2011-2022 走看看