题目:
Given a string s and a string t, check if s is subsequence of t.
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).
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).
Example 1:
s = "abc"
, t = "ahbgdc"
Return true
.
Example 2:
s = "axc"
, t = "ahbgdc"
Return false
.
Follow up:
If there are lots of incoming S, say S1, S2, ... , Sk where k >= 1B, and you want to check one by one to see if T has its subsequence. In this scenario, how would you change your code?
题意:
给定字符串t和字符串s,判断s是否为t的子串,子串的意思是,s中的元素都在t中出现,且s中各元素在t中的相对位置保持不变。
代码:
class Solution(object):
def isSubsequence(self, s, t):
"""
:type s: str
:type t: str
:rtype: bool
"""
m = len(s)
n = len(t)
if m>n :
return False
else :
pos = 0 #记录t中检索到的当前位置
for k in range(m) : #遍历s
i = pos #对s中每个元素,在t中从当前位置pos开始查找
while i < n :
if t[i] == s[k] : #如果s的元素s[k]在t中,更新t 的当前位置pos,用于s的下一个元素的查找
pos = i+1
break
else : #否则,i自增,继续找t中是否有元素s[k]
i += 1
if k < m and i == n : #如果t遍历完,但是s没有遍历完,则s不在t中
return False
return True #如果s遍历完,且t没遍历完或刚好遍历完,返回True
笔记:
思想比较简单,不知道算法好坏。