• LeetCode 392 判断子序列


    LeetCode 392 判断子序列

    问题描述:
    给定字符串 s 和 t ,判断 s 是否为 t 的子序列。
    你可以认为 s 和 t 中仅包含英文小写字母。字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 <=100)。
    字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。

    动态规划

    1. 对字符串s的每个位置i,考虑substr[0,i]已经包含了s中的前m个字符
    2. dp[i]表示s.substr(0,i+1)包含了s中的前dp[i]个字符
    3. dp[i+1] = s.charAt(i+1)==t.charAt(dp[i])? dp[i]+1: dp[i]
    4. dp[0] = s.charAt(0)==t.charAt(0)? 0: 1

    执行用时:2 ms, 在所有 Java 提交中击败了40.31%的用户
    内存消耗:37.9 MB, 在所有 Java 提交中击败了10.58%的用户

    class Solution {
        //找连续的子序列可以使用双指针/滑动窗口
        public boolean isSubsequence(String s, String t) {
            if(s==null || s.length()==0) {
                return true;
            }else if(t==null || t.length()==0) {
                return false;
            }else if(s.length() > t.length()) {
                return false;
            }
    
            int[] dp = new int[t.length()];
            dp[0] = t.charAt(0)==s.charAt(0)? 1:0;
            for(int i=1; i<t.length(); i++) {
                dp[i] = (t.charAt(i)==s.charAt(dp[i-1]))? dp[i-1]+1: dp[i-1];
                if(dp[i]==s.length()) {
                    return true;
                }
            }
            
            return false;
        }
    }
    
  • 相关阅读:
    2018.11.21 struts2获得servletAPI方式及如何获得参数
    2018.11.20 Struts2中对结果处理方式分析&struts2内置的方式底层源码剖析
    2018.11.19 Struts2中Action类的书写方式
    2018.11.18 Sturts2配置详解&常量配置进阶
    2018.11.17 Struts2框架入门
    需求分析
    可行性研究
    防火墙
    homework1
    静态网页开发技术
  • 原文地址:https://www.cnblogs.com/CodeSPA/p/13577534.html
Copyright © 2020-2023  润新知