我用到的套件如下,後面會講述這些套件的用法及用途
from sys import stdin
from collections import deque, defaultdict
from itertools import groupby, count
collections.deque與題目操作方法有一一對應關係
剩下就是對字串進行處理、操作(if x[0]==insert: ...
)
題目的方法 | python deque |
---|---|
insert left x | appendleft(x) |
insert right x | append(x) |
insert k x | insert(k-1, x) |
delete left | pop() |
delete right | popleft() |
delete k | del deque[k-1] |
groupby大致上可以達成這些事情
[k for k, g in groupby('AAAABBBCCDAABBB')] #--> A B C D A B
[list(g) for k, g in groupby('AAAABBBCCD')] #--> AAAA BBB CC D
k
就是相同連續字串的單個字元,g
就會是整串文字,但g
是一個iterator
沒有len()
可以用,第三步驟就來處理這些事情
更多groupby
詳細說明可以參考這篇,或參考官方文件
我是參考 more-itertools.ilen 的方法,就可以輕鬆算出長度了
不然一般可能是使用 len(tuple(g))
,把g實體化就可以算長度
def ilen(iterable):
"""Return the number of items in *iterable*.
>>> ilen(x for x in range(1000000) if x % 3 == 0)
333334
This consumes the iterable, so handle with care.
"""
# This approach was selected because benchmarks showed it's likely the
# fastest of the known implementations at the time of writing.
# See GitHub tracker: #236, #230.
counter = count()
deque(zip(iterable, counter), maxlen=0)
return next(counter)
defaultdict(list)
可以做到key
是長度、value
則是用一個list
儲存不定長度的資料
對應到groupby
產生的資料,di[ilen(g)].append(k)
就完成拉~
之後,找到max(di)
就可以找到想要的字有哪些了。至於萬一沒找到(空deque),我直接輸出0
就AC
挖屋,版面被弄爛了
_____
3. 計算iterator長度的方法 - ilen
我是參考 more-itertools.ilen 的方法,就可以輕鬆算出長度了
不然一般可能是使用len(tuple(g))
,把g實體化就可以算長度def ilen(iterable): """Return the number of items in *iterable*. >>> ilen(x for x in range(1000000) if x % 3 == 0) 333334 This consumes the iterable, so handle with care. """ # This approach was selected because benchmarks showed it's likely the # fastest of the known implementations at the time of writing. # See GitHub tracker: #236, #230. counter = count() deque(zip(iterable, counter), maxlen=0) return next(counter)
4. 計算最長連續字串 - defaultdict
defaultdict(list)
可以做到key
是長度、value
則是用一個list
儲存不定長度的資料
對應到groupby
產生的資料,di[ilen(g)].append(k)
就完成拉~
之後,找到max(di)
就可以找到想要的字有哪些了。至於萬一沒找到(空deque),我直接輸出0
就AC
我用到的套件如下,後面會講述這些套件的用法及用途
from sys import stdin
from collections import deque, defaultdict
from itertools import groupby, count
collections.deque與題目操作方法有一一對應關係
剩下就是對字串進行處理、操作(if x[0]==insert: ...
)
題目的方法 | python deque |
---|---|
insert left x | appendleft(x) |
insert right x | append(x) |
insert k x | insert(k-1, x) |
delete left | pop() |
delete right | popleft() |
delete k | del deque[k-1] |
groupby大致上可以達成這些事情
[k for k, g in groupby('AAAABBBCCDAABBB')] #--> A B C D A B
[list(g) for k, g in groupby('AAAABBBCCD')] #--> AAAA BBB CC D
k
就是相同連續字串的單個字元,g
就會是整串文字,但g
是一個iterator
沒有len()
可以用,第三步驟就來處理這些事情
更多groupby
詳細說明可以參考這篇,或參考官方文件