zoukankan      html  css  js  c++  java
  • Leetcode: 115. Distinct Subsequences

    Description

    Given a string S and a string T, count the number of distinct subsequences of S which equals T.
    
    A subsequence of a string is a new string which is formed from the original string by deleting some (can be none) of the characters without disturbing the relative positions of the remaining characters. (ie, "ACE" is a subsequence of "ABCDE" while "AEC" is not).
    
    It's guaranteed the answer fits on a 32-bit signed integer.
    

    Example

    Input: S = "rabbbit", T = "rabbit"
    Output: 3
    Explanation:
    As shown below, there are 3 ways you can generate "rabbit" from S.
    (The caret symbol ^ means the chosen letters)
    
    rabbbit
    ^^^^ ^^
    rabbbit
    ^^ ^^^^
    rabbbit
    ^^^ ^^^
    

    分析

    Code

    class Solution(object):
        def numDistinct(self, s, t):
            """
            :type s: str
            :type t: str
            :rtype: int
            """
            def oord(k):
                return ord(k)-96 if ord(k) > 91 else ord(k)-64
            
            helper, dp = [[] for i in range(26)], [0]*(len(t)+1)
            dp[0] = 1
            for k, v in enumerate(t):
                helper[oord(v)].append(k)
            s = ''.join([i for i in s if i in t])
            for i in s:
                for j in reversed(helper[oord(i)]):
                    dp[j+1] += dp[j]
            return dp[-1]
    

    总结

    这是 2020 3 月份自己独立写出来的, 第二次就是 AC 了, 第一次是 runtime error。 提交后 3 月后发现 仍然了战胜了 99.71 % 的提交。不知道当时是否是战胜 100 % 的。
    
    最最关键的时, 3 月后。我拿到了题目,居然无从下手。不像是二次 就 AC 的人啊。 难道学习不会增加实力? 只是这边增加一点,那边少一点?
    看了 几分钟后,发现思路还是挺 表意。没有任何奇技淫巧
    
  • 相关阅读:
    GNU GPL介绍
    《Getting Started with WebRTC》第一章 WebRTC介绍
    进一步解 apt-get 的几个命令
    状态模式----C++实现
    boost库asio详解1——strand与io_service区别
    Timer.5
    Timer.4
    Timer.3
    MFC定时器
    boost.asio系列——Timer
  • 原文地址:https://www.cnblogs.com/tmortred/p/13234837.html
Copyright © 2011-2022 走看看