您的当前位置:首页正文

字符串压缩算法js实现

来源:要发发知识网

题目:字符串压缩,比如abbbc压缩为ab3c。
分析:如果字符是数字需要处理,比如aa2222b压缩为a224b,解压的时候就不知道是224个a,还是2个a,4个2或者其他。
解决办法,如果是数字,在前面加一个特殊字符标识,同时这个特殊字符也要单独处理
(前面加特殊字符是最精简的方法,只需要一个特殊字符,另外对于比较散乱的字符串,也就是单个字符很多的情况,会有很多1,所以如果字符数量是1则不压缩。)

'use strict';

const small = function (arr) {
  let strList;
  if (Array.isArray(arr)) strList = arr;
  else if (typeof arr === 'string') strList = arr.split('');
  else throw new Error('....');

  let arrStr = '';
  let count = 1;
  for (let i = 0; i < strList.length; i++) {
    if (strList[i + 1] === strList[i]) {
      count++;
    } else {
      if (/\d/.test(strList[i]) || /'/.test(strList[i])) arrStr += `'${strList[i]}`;
      else arrStr += `${strList[i]}`;
      if (count !== 1) arrStr += `${count}`;
      count = 1;
    }
  }

  return arrStr;
};

const str = 'abgjldfff11111111111f4ous\'\'\'';
console.log(small(str));