Python迭代器還可以這樣玩


給定字符串 s 和 t ,判斷 s 是否為 t 的子序列。 你可以認為 s 和 t 中僅包含英文小寫字母。字符串 t 可能會很長(長度 ~= 500,000),而 s 是個短字符串(長度 <=100)。 字符串的一個子序列是原始字符串刪除一些(也可以不刪除)字符而不改變剩余字符相對位置形成的新字符串。(例如,"ace"是"abcde"的一個子序列,而"aec"不是)。 來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/is-subsequence
>>>?def?is_subseq(s,t):
...?????t?=?iter(t)
...?????return?all(i?in?t?for?i?in?s)
...?
>>>?is_subseq('ace','abcde')
True
>>>?is_subseq('aec','abcde')
False
>>>?
>>>?t?=?'abcde'
>>>?iter(t)0x7fa7f22c8a60>
>>>?t?=?iter(t)
>>>?t0x7fa7f229d4c0>
(i?in?t?for?i?in?s)
__next__ 方法,當存在時直接返回 True,而下一次判斷時繼續(xù)?__next__ 而并不回到起始位置重新查找。這一點,我們可以一步一步執(zhí)行 next 做實驗:以 s= 'aec' 和 t = 'abcdef' 為例:>>>?t?=?'abcdef'
>>>?s?=?'aec'
>>>?t?=?iter(t)
>>>?'a'?in?t
True
>>>?next(t)
'b'
>>>?'e'?in?t
True
>>>?#此時指針已經(jīng)指向?e,再調(diào)用?next?回返回?f
>>>?next(t)
'f'?
>>>?'c'?in?t?#指針已經(jīng)指向?f,f?后面不會出現(xiàn)字符?c,必然返回?false?
False
評論
圖片
表情
