zoukankan      html  css  js  c++  java
  • LeetCode392. 判断子序列

    思路1:双指针。每次贪心的匹配,如果匹配成功则同时右移。

    ☆☆☆思路2:动态规划。

    代码1:

    class Solution {
        public boolean isSubsequence(String s, String t) {
            // 时间复杂度: O(n+m)  空间复杂度:O(1)
            int si = 0, ti = 0;
            while (si < s.length() && ti < t.length()) {
                if (s.charAt(si) == t.charAt(ti)) {
                    si ++;
                    ti ++;
                }else {
                    ti ++;
                }
            }
            return si == s.length();
        }
    }

    代码2:

    class Solution {
        public boolean isSubsequence(String s, String t) {
            int m = s.length(), n = t.length();
            if (m > n) return false;
            if (m == 0) return true;
            /**
             * 状态的定义1:dp[i][j]表示 s中以第i个字符结尾的字符串 是否是 t中以第j个字符结尾的字符串 的子序列
             */
            boolean[][] dp = new boolean[m][n];
            dp[0][0] = s.charAt(0) == t.charAt(0) ? true : false;
            for (int j = 1; j < n; j++) {
                dp[0][j] = s.charAt(0) == t.charAt(j) ? true : dp[0][j-1];
            }
            for (int i = 1; i < m; i++) {
                for (int j = 1; j < n; j++) {
                    if (s.charAt(i) == t.charAt(j)) {
                        dp[i][j] = dp[i-1][j-1];
                    }else {
                        dp[i][j] = dp[i][j-1];
                    }
                }
            }
            return dp[m - 1][n - 1];
            /**
             * 状态定义2:dp[i][j]表示 s中前i个字符 是否是 t中前j个字符 的子序列
             */
            /*
            boolean[][] dp = new boolean[m + 1][n + 1];
            for (int j = 0; j <= n; j++) {
                dp[0][j] = true;
            }
            for (int i = 1; i <= m; i++) {
                for (int j = 1; j <= n; j++) {
                    if (s.charAt(i - 1) == t.charAt(j - 1)) {
                        dp[i][j] = dp[i-1][j-1];
                    }else {
                        dp[i][j] = dp[i][j-1];
                    }
                }
            }
            return dp[m][n];
            */
        }
    }
  • 相关阅读:
    windows下安装mysql 开机启动
    android基础---->XMl数据的解析
    web基础---->session的使用
    android基础---->ListView的使用
    android基础---->WebView的使用
    android基础---->Toast的使用
    android基础---->SQLite数据库的使用
    android基础---->SharedPreferences的使用
    js数组的操作
    Javascript中的Array(数组) 、{}(映射) 与JSON解析
  • 原文地址:https://www.cnblogs.com/HuangYJ/p/14232868.html
Copyright © 2011-2022 走看看