leetcode 392 判斷子串行

2021-10-25 05:12:55 字數 1606 閱讀 3709

題目大意:

給定字串 s 和 t ,判斷 s 是否為 t 的子串行。

你可以認為 s 和 t 中僅包含英文小寫字母。字串 t 可能會很長(長度 ~= 500,000),而 s 是個短字串(長度 <=100)。

字串的乙個子串行是原始字串刪除一些(也可以不刪除)字元而不改變剩餘字元相對位置形成的新字串。(例如,"ace"是"abcde"的乙個子串行,而"aec"不是)。

思路:運用雙指標的思想,給s和t分別設定指標i,j,迴圈中讓j一直遞增,來尋找t串中是否有s[i]元素。如果t[j] == s[i]即s[i]被匹配到了那麼i,j,ans都加1,繼續向後匹配。最終若ans等於s串的長度,則匹配成功。

class

solution

:def

issubsequence

(self, s:

str, t:

str)

->

bool

: ans, i, j =0,

0,0 l1, l2 =

len(s)

,len

(t)while iif s[i]

== t[j]

: i = i +

1 ans = ans +

1 j = j +

1if ans == l1:

return

true

else

:return

false

思考為什麼用雙指標,因為這裡的匹配要考慮t串中字元的相對順序,即"ab"不是"bca"的子串。如果直接for,就會出現順序錯誤的匹配問題。

附一段通過測試點14/15的**,思路一樣,但就是不知道為什麼錯了……

class

solution

:def

issubsequence

(self, s:

str, t:

str)

->

bool

:if s == t:

return

true

ans =

0 j =

0 temp =

""for item in t:

if item in s:

temp = temp + item

for i in

range

(len

(s))

:while j <=

len(temp)-1

:if temp[j]

== s[i]

: j +=

1 ans +=

1break

else

: j +=

1if ans ==

len(s)

:return

true

else

:return

false

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...