一道關於字串壓縮的面試題
阿新 • • 發佈:2019-01-03
題目
編寫一個演算法,實現基本的字串“壓縮”演算法,比如對於字串'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
總結:演算法一比較好,可讀性更強