2022-10-08 【我的刷题日记】392 判断子序列

思路:这题依旧比较容易,判断s是否是t的子序列,我们依然可以用前几天求共同子序列长度的方法来解决,只不过这题子序列固定为了s,最后求出来的长度如果是s的长度那么就可以匹配,如果不是那么就无法匹配,此外还需要在递推公式中做出一点修改,我们之前在做最长公共子序列的时候,当遇到不匹配的情况需要考虑两种情况 dp[i][j] = Math.max(dp[i-1][j],dp[i][j-1]); 而本题中是用整个s去匹配t,那么当不匹配时直接继承t的前一位即可 dp[i][j] = dp[i][j-1];

class Solution {
    public boolean isSubsequence(String s, String t) {
        if(t.length() < s.length()) return false;
//        dp[i][j]表示以i-1和j-1结尾的相同子序列长度
        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 {
//                    不相等的时候直接继承t的上一位的dp值 s的则不用动
                    dp[i][j] = dp[i][j-1];
                }
            }
        }
//        最后长度相等 说明匹配
        if (dp[s.length()][t.length()] == s.length()) return true;
        return false;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容