Re: [討論] 用python找出一串數字中最長的"二數數串"
numstring = "889988899278392520771323543282829292222943485709"
def ngram(n, iter_tokens):
"""Return a generator of n-gram from an iterable"""
z = len(iter_tokens)
return (iter_tokens[i:i+n] for i in xrange(z-n+1))
for i in range(len(numstring), 1, -1):
results = [ng for ng in ngram(i, numstring) if len(set(ng))==2]
if len(results) > 0:
print results
break
※ 引述《mystea (mystea)》之銘言:
: 這是一個軟體公司過往的面試題目.
: 給定一個任意的數串, 比方說:
: numstring = '889988899278392520771323543282829292222943485709'
: 請用python找出最長的, 只有兩種數字的子數列. 在前述的例子裡,
: 答案是889988899 和 292922229.
: 我個人的解答如下:
: numstring = '889988899278392520771323543282829292222943485709'
: slen = len(numstring)
: candidate={}
: length_of_string=[]
: next_i = 0
: start_index=[]
: ii=0
: while (next_i + ii != slen-1):
: record = True
: candidate = {}
: start_index.append(next_i)
: for ii, j in enumerate(s[next_i:]):
: if j in candidate: candidate[j] += 1
: else: candidate[j] = 1
: if (len(candidate) == 2 and record):
: next_i += ii
: record = False
: if len(candidate) > 2: break
: length_of_string.append(ii+1)
: smax = max(length_of_string)
: sstarts = [start_index[i] for i in range(len(length_of_string)) if length_of_string[i]==smax]
: finalresult = [s[a:a+smax-1] for a in sstarts]
: print(finalresult)
: 想請教版友們有沒有其他的方法? 另外, 由於我台接觸python不久, 想請問我的
: 方法是否有多餘的地方? 謝謝.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 203.69.179.66
※ 編輯: dadadavid 來自: 203.69.179.66 (09/26 08:50)
討論串 (同標題文章)
Python 近期熱門文章
PTT數位生活區 即時熱門文章