題目描述:
這道題有多種不同解法。
1.生成迭代器方法——**最少,最直接
這種方法會用到iter()和all()兩個函式。
iter()函式可以針對列表、字串、元組等可迭代物件生成迭代器,然後對迭代器中的內容逐個處理;all()函式用來判斷給定的可迭代引數中的所有元素是否都為true,是返回true,不是返回false。
最簡潔的**如下:
class
solution
:def
issubsequence
(self, s:
str, t:
str)
->
bool
:
t=iter
(t)return
all(i in t for i in s)
針對該**的解釋為:
class
solution
(object):
defissubsequence
(self, s, t)
:"""
:type s: str
:type t: str
:rtype: bool
"""t =
iter
(t) res =
for c in s:
if c in t:
else
:none)
res =
iter
(res)
return
all(res)
2.雙指標法——最好理解的方法
**:
class
solution
:def
issubsequence
(self, s:
str, t:
str)
->
bool
:
i=0
j=0while i<
len(s)
and j<
len(t)
:if s[i]
==t[j]
:
i+=1
j+=1else
:
j+=1return i==
len(s)
3.庫函式法
該方法會用到find()函式。find()用來檢測乙個字串中是否包含子字串str,如果包括則返回第乙個字元的索引值,不包括則返回-1。函式中可以指定對字串的搜尋範圍,具體語法格式為str.find(str, beg, end)。
**如下,注意loc的定義值要為-1:
class
solution
:def
issubsequence
(self, s:
str, t:
str)
->
bool
:
loc=-1
for i in s:
loc = t.find(i,loc+1)
#從找到的上乙個字元的後乙個位置開始查詢
if loc==-1
:return
false
return
true
leetcode 判斷子串行
給定字串 s 和 t 判斷 s 是否為 t 的子串行。你可以認為 s 和 t 中僅包含英文小寫字母。字串 t 可能會很長 長度 500,000 而 s 是個短字串 長度 100 字串的乙個子串行是原始字串刪除一些 也可以不刪除 字元而不改變剩餘字元相對位置形成的新字串。例如,ace 是 abcde ...
leetcode 判斷子串行
給定字串 s 和 t 判斷 s 是否為 t 的子串行。你可以認為 s 和 t 中僅包含英文小寫字母。字串 t 可能會很長 長度 500,000 而 s 是個短字串 長度 100 字串的乙個子串行是原始字串刪除一些 也可以不刪除 字元而不改變剩餘字元相對位置形成的新字串。例如,ace 是 abcde ...
Leetcode 判斷子串行
給定字串 s 和 t 判斷 s 是否為 t 的子串行。你可以認為 s 和 t 中僅包含英文小寫字母。字串 t 可能會很長 長度 500,000 而 s 是個短字串 長度 100 字串的乙個子串行是原始字串刪除一些 也可以不刪除 字元而不改變剩餘字元相對位置形成的新字串。例如,ace 是 abcde ...