題目:
給定字串 s 和 t ,判斷 s 是否為 t 的子串行。
你可以認為 s 和 t 中僅包含英文小寫字母。字串 t 可能會很長(長度 ~= 500,000),而 s 是個短字串(長度 <=100)。
字串的乙個子串行是原始字串刪除一些(也可以不刪除)字元而不改變剩餘字元相對位置形成的新字串。(例如,"ace"是"abcde"的乙個子串行,而"aec"不是)。
我看到這題,就知道肯定是要遍歷一遍t的。而且s在t中的相對位置不變,所以:
class
solution
:def
issubsequence
(self, s:
str, t:
str)
->
bool
: length =
len(s)
j =0if
len(s)==0
:return
true
iflen
(s)!=
0and
len(t)==0
:return
false
for i in t:
if i == s[j]
: j +=
1if j == length:
# 當j等於length,
# 說明s的字元按照相對順序,都出現在s中,,提前return
return
true
return
false
另外寫了一種用map的方法。適合要判斷多個子串行問題。
class
solution
:def
issubsequence
(self, s:
str, t:
str)
->
bool
: dic =
for i, a in
enumerate
(t):
ifnot dic.get(a,
none):
dic[a]=[
] dic[a]
tag =-1
for i in
range
(len
(s))
: pos = dic.get(s[i]
,none
)if pos is
none
:return
false
head, tail =0,
len(pos)-1
while head < tail:
mid =
(head + tail)
>>
2if pos[mid]
> tag:
tail = mid
else
: head = mid +
1if tail < head or pos[head]
< tag:
return
false
tag = pos[head]
return
true
leetcode 392 判斷子串行
給定字串s和t,判斷s是否為t的子串行。你可以認為s和t中僅包含英文小寫字母。字串t可能會很長 長度 500,000 而s是個短字串 長度 100 字串的乙個子串行是原始字串刪除一些 也可以不刪除 字元而不改變剩餘字元相對位置形成的新字串。例如,ace 是 abcde 的乙個子串行,而 aec 不是...
leetcode 392 判斷子串行
給定字串 s 和 t 判斷 s 是否為 t 的子串行。你可以認為 s 和 t 中僅包含英文小寫字母。字串 t 可能會很長 長度 500,000 而 s 是個短字串 長度 100 字串的乙個子串行是原始字串刪除一些 也可以不刪除 字元而不改變剩餘字元相對位置形成的新字串。例如,ace 是 abcde ...
LeetCode 392 判斷子串行
題目描述 給定字串 s 和 t 判斷 s 是否為 t 的子串行。你可以認為 s 和 t 中僅包含英文小寫字母。字串 t 可能會很長 長度 500,000 而 s 是個短字串 長度 100 字串的乙個子串行是原始字串刪除一些 也可以不刪除 字元而不改變剩餘字元相對位置形成的新字串。例如,ace 是 a...