打卡第二十六天 Task26 判斷子串行

2021-10-04 11:01:08 字數 1994 閱讀 1819

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

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

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

s =

"abc"

, t =

"ahbgdc"

返回 true.

s =

"axc"

, t =

"ahbgdc"

返回 false.

想辦法按位置順序找出s中的每個元素是否都在t中,一定要注意的是順序問題

看了一下題解,學到了這個find()函式的用法:

find() 方法檢測字串中是否包含子字串 str ,如果指定 beg(開始) 和 end(結束) 範圍,則檢查是否包含在指定範圍內,如果包含子字串返回開始的索引值,否則返回-1。beg和end的初始值都預設為0,因此可以用a是否等於-1來判斷s中的第i個元素是否在t中,並且可以從每次判斷的下一位進行下次判斷。

class

solution

:def

issubsequence

(self, s:

str, t:

str)

->

bool:if

len(s)==0

:return

true

a =-1

for i in s:

a = t.find(i, a +1)

if a ==-1

:return

false

return

true

這個方法看起來還挺有趣的,就摘錄了下來,它的原理是:

iter()返回的是乙個可迭代的物件(迭代器),而迭代器物件又具備__next__()內建方法,因此for迴圈實質是迴圈呼叫__next__()方法,並且會處理最後一次__next__()的異常。在一次迴圈中它是單向的。

通俗點說就是,all函式是所有的元素都是true才返回true,除此都是false。然後t=iter(t)得到的迭代器的作用是使得執行c in t時,每次呼叫乙個t裡的元素對比,直到對比成功跳出來或者不在t裡,然後第二個c對比的時候就是接著第一次的位置繼續對比t

打卡第二十六天

在組合數合裡,貝爾數給出了集合劃分的數目,以數學家埃里克 坦普爾 貝爾 eric temple bell 命名,是組合數學中的一組整數數列。貝爾三角形類似於楊輝三角,只是其中各個項的計算規則不同。其規則如下 1.第一行第一項是1 2.對於n 1,第n行第一項等同第n 1行最後一項。3.對於m,n 1...

第二十六天總結

求多源 無負權邊的最短路 floyd演算法 floyd warshall演算法是解決任意兩點間的最短路徑的一種演算法,可以正確處理有向圖或負權的最短路徑問題,同時也被用於計算有向圖的傳遞閉包。floyd warshall演算法的時間複雜度為o n3 空間複雜度為o n2 最小生成樹 給定乙個無向圖,...

python第二十六天

import time from datetime import datetime defdownload name print time.sleep 3 print download 信條 download 加勒比海盜 download 摔跤吧爸爸 程序預設有乙個執行緒,這個執行緒叫主線程 其他的...