encode method

List<int> encode(
  1. List<int> input
)

Implementation

List<int> encode(List<int> input) {
  if (input.isEmpty) return [];
  final dict = <String, int>{};
  for (var i = 0; i < 256; i++) {
    dict['$i'] = i;
  }
  var code = 256;
  final out = <int>[];
  var w = <int>[input[0]];
  for (var idx = 1; idx < input.length; idx++) {
    final k = input[idx];
    final wk = List<int>.from(w)..add(k);
    final wkKey = wk.join(',');
    final wKey = w.join(',');
    if (dict.containsKey(wkKey)) {
      w = wk;
    } else {
      out.add(dict[wKey]!);
      dict[wkKey] = code++;
      w = [k];
    }
  }
  out.add(dict[w.join(',')]!);
  return out;
}