看板 Python 關於我們 聯絡資訊
這是一個軟體公司過往的面試題目. 給定一個任意的數串, 比方說: 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: 70.166.92.146