題目大意:
給定字串 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...