LeetCode——392.判断子序列(Java)动态规划解决

直接遍历法:

class Solution {
public boolean isSubsequence(String s, String t) {
        int sLen = s.length();
        int tLen = t.length();
        if (sLen <= 0) {
            return true;
        } else if (sLen > tLen) {
            return false;
        }
        int ss = 0;
        for (int i = 0; i < tLen; i++) {
            if (s.charAt(ss) == t.charAt(i)) {
                ss++;
                if (ss == sLen) {
                    return true;
                }
            }
        }
        return ss == sLen;
}

动态规划:
因为我刚开始没理解代码,所以我画了图:
LeetCode——392.判断子序列(Java)动态规划解决_第1张图片
代码:

package LeetCode.OneToFiveHundred;

public class ThreeHundredAndNinetyTwo {
    public boolean isSubsequence(String s, String t) {
        // s是否为t的子序列
        int sLen = s.length(),tLen = t.length();
        if (sLen == 0 )return true;
        if (sLen > tLen) return false;
        boolean temp [] [] = new boolean[sLen + 1][tLen + 1];
        //初始化
        for (int i = 0;i < tLen; i++)
            temp[0][i] = true;
        //进行动态规划
        //当t中出现了s的一个字符串之后将该行的所有数组后续全部转化为true
        for (int i = 1; i <= sLen; i++){
            for (int j = 1; j<=tLen; j++){
                if (s.charAt(i - 1) == t.charAt(j - 1))
                    temp[i][j] = temp[i -1][j - 1];
                else
                    temp[i][j] = temp[i][j - 1];
            }
        }
        return temp[sLen][tLen];
    }
}

详细的解释在注释中,如果不懂请留言询问。

你可能感兴趣的:(LeetCode)