392. 判断子序列

动态规划

class Solution {
    public boolean isSubsequence(String s, String t) {

        /**
         * 和《1143. 最长公共子序列》一样
         */
        int[][] dp = new int[s.length() + 1][t.length() + 1];

        for (int i = 1; i < s.length() + 1; i++) {

            for (int j = 1; j < t.length() + 1; j++) {

                if (s.charAt(i - 1) == t.charAt(j - 1)){
                    dp[i][j] = dp[i - 1][j - 1] + 1;
                }
                else {

                    /**
                     * 唯一的区别是,当比较的字符不相等时,只考虑dp[i][j - 1],即删掉当前的t[j - 1]的情况
                     * 因为s所有字符都需要出现在t中,不能删
                     */
                    dp[i][j] = dp[i][j - 1];
                }
            }
        }

        return dp[s.length()][t.length()] == s.length();
    }
}

/**
 * 时间复杂度 O(n)
 * 空间复杂度 O(n)
 */

双指针

class Solution {
    public boolean isSubsequence(String s, String t) {

        if (s.length() > t.length()){
            return false;
        }

        /**
         * 双指针遍历字符串,如果t遍历完了s还没有,就说明找不到
         */
        int left = 0;
        int right = 0;

        while (left < s.length()){

            if (s.charAt(left) == t.charAt(right)){

                left++;
                right++;
            }
            else {
                right++;
            }

            if (right == t.length() && left != s.length()){
                return false;
            }
        }

        return true;
    }
}

/**
 * 时间复杂度 O(n)
 * 空间复杂度 O(1)
 */

https://leetcode-cn.com/problems/is-subsequence/

posted @   振袖秋枫问红叶  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示