LeetCode 392 判斷子串行

2021-10-01 10:26:41 字數 1648 閱讀 7420

題目:

給定字串 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...