zoukankan      html  css  js  c++  java
  • leetcode392 Is Subsequence

     1 """
     2  Given a string s and a string t, check if s is subsequence of t.
     3 You may assume that there is only lower case English letters in both s and t. t is potentially a very long (length ~= 500,000) string, and s is a short string (<=100).
     4 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).
     5 Example 1:
     6 s = "abc", t = "ahbgdc"
     7 Return true.
     8 Example 2:
     9 s = "axc", t = "ahbgdc"
    10 Return false.
    11 """
    12 """
    13 自强自信题。
    14 看到这道题的想法就是 在子串中遍历每个字符,
    15 按顺序判断是否在父串中
    16 如果在,flag为True,父串变为所匹配字母的下标+1到末尾
    17 如果不在,flag为False,跳出循环
    18 """
    19 class Solution1(object):
    20     def isSubsequence(self, s, t):
    21         n = len(s)       #子串长度
    22         if n == 0:
    23             return True
    24         flag = False
    25         for i in range(n):
    26             if s[i] in t:                #判断字符是否在t里
    27                 t = t[t.index(s[i])+1:]  #bug没有加1
    28                 flag = True
    29             else:
    30                 flag = False
    31                 break            #bug没有提前跳出,后面的字符如果匹配成功,最后会是True
    32         return flag
    33 
    34 """
    35 解法二:提供一种队列法。与Solution1思想一致。
    36 这里用队列十分高级
    37 """
    38 class Solution2(object):
    39     def isSubsequence(self, s, t):
    40         from collections import deque
    41         queue = deque(s)          #deque模块提供了两端都可以操作的序列,
    42                                   # 这意味着,在序列的前后你都可以执行添加或删除操作
    43         for c in t:
    44             if not queue:
    45                 return True
    46             if c == queue[0]:       # d = deque('12345')
    47                 queue.popleft()     # d.popleft()  '1'   extendleft
    48         return not queue            # d.pop()      '5'   extend
    49 
    50 """
    51 第三种是种双指针法,很重要,许多题目都可以使用
    52 双指针要用while循环,单独操作i, j步长,总长度为终止条件
    53 """
    54 class Solution3(object):
    55     def isSubsequence(self, s, t):
    56         slen = len(s)
    57         tlen = len(t)
    58         i, j = 0, 0                      #bug代码
    59         while(i < slen and j < tlen):    #for i in range(slen):
    60             if(s[i] == t[j]):            #    for j in range(tlen):
    61                 i += 1                   #        if s[i] == t[i]:
    62             j += 1
    63         return i == slen
  • 相关阅读:
    如果男人是计算机,女人是软件(在开发过程中的偶然随想)
    C/C++ 可变参数函数的原理和应用
    Python学习记录Hello Word
    Unity 把数字,英文图片变成字体
    unity+Android+PC加载本地图片
    Python学习记录安装
    Android学习 问题与答案
    Android 第三方 APK 包的静默安装
    Android学习 问题与答案 (2)
    JNI 之 HelloWorld
  • 原文地址:https://www.cnblogs.com/yawenw/p/12262614.html
Copyright © 2011-2022 走看看