問題
同じ文字が連続する場合、その文字列の出現回数を数えて圧縮するアルゴリズムを考えます。
0と1の2つの文字だけで構成される文字列を、回数だけで表現します。
(FAXの圧縮などで使われている方法です。)
たとえば、「000001111110111000000001111」を[5, 6, 1, 3, 8, 4]というリストに変換するプログラムを作成してください。
文字列は必ず「0」から始まるものとし、「1」で始まる場合はリストの先頭を0にします。
解法・ソースコード
処理中の値は0か1のためフラグで管理し、異なる値が現れたときにフラグを反転させます。
同じ値が続いている場合はカウントし、異なる値が現れた時はこれまでのカウント数をリストに追加し、新たにカウントをリセット、フラグを反転します。
[Google Colaboratory]
1 | data = '000000111111100111000000001111' |
[実行結果]
[5, 6, 1, 3, 8, 4]