题目描述
给定字符串 s 和 t ,判断 s 是否为 t 的子序列。
你可以认为 s 和 t 中仅包含英文小写字母。字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 <=100)。
字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。
正则表达式
class Solution:
def isSubsequence(self, s: str, t: str) -> bool:
new_s="\w*"+"\w*".join(s)
return True if re.match(new_s,t) else False
倒数第二个数据超出时间限制了
双指针
class Solution:
def isSubsequence(self, s: str, t: str) -> bool:
i=j=0 #i遍历s,j遍历t
while i<len(s) and j<len(t):
if t[j]==s[i]:
i+=1
j+=1
return i==len(s)
执行用时 :316 ms, 在所有 Python3 提交中击败了28.20%的用户
内存消耗 :18.3 MB, 在所有 Python3 提交中击败了7.80%的用户
用find函数
class Solution:
def isSubsequence(self, s: str, t: str) -> bool:
start = 0
for i in s:
index = t.find(i, start)
if index == -1:
return False
start = index + 1
return True
用find来查找比用双指针快多了
执行用时 :32 ms, 在所有 Python3 提交中击败了97.23%的用户
内存消耗 :18.2 MB, 在所有 Python3 提交中击败了8.35%的用户