1. 程式人生 > >一道關於字串壓縮的面試題

一道關於字串壓縮的面試題

題目

編寫一個演算法,實現基本的字串“壓縮”演算法,比如對於字串'abbbbffcccdddcc',經過演算法處理之後得到的輸出為'a1b4f2c3d3c2',如果處理後的字串長度不小於原串長度,則返回原串。

演算法

演算法一

In [38]: def compress(s):
    ...:     ss = [s[0], 1]
    ...:     for c in s[1:]:
    ...:         if ss[-2] != c:
    ...:             ss.extend([c, 1])
    ...:         else:
    ...:             ss[-1] += 1
    ...:     return ''.join(str(i) for i in ss) if len(ss) < len(s) else s
    ...:
    ...:

In [39]: compress('abbbbffcccdddcc') == 'a1b4f2c3d3c2'
Out[39]: True

演算法二

In [36]: def compress(s):
    ...:     ks = [0] + [i for i in range(1, len(s)) if s[i]!=s[i-1]]
    ...:     ss = [f'{s[ks[i]]}{ks[i+1]-ks[i]}' for i in range(len(ks)-1)]+[f'{s[-1]}{len(s)-ks[-1]}']
    ...:     return ''.join(ss) if len(ss) < len(s) else s
    ...:
    ...:

In [37]: compress('abbbbffcccdddcc') == 'a1b4f2c3d3c2'
Out[37]: True

總結:演算法一比較好,可讀性更強