字符串压缩算法:

  1. 遍历字符串,将连续相同的字符计数,并用数字替代,例如将 'aaa' 替换为 '3a'。
  2. 对于数字、字母、汉字以外的字符,可以用特殊字符代替,例如将 '-' 替换为 '#1'。
  3. 将替换后的字符串保存起来即可。

示例代码:

function compress(str) {
  let count = 1;
  let result = '';
  for (let i = 1; i <= str.length; i++) {
    if (str[i] === str[i-1]) {
      count++;
    } else {
      if (count > 1) {
        result += count;
      }
      result += str[i-1];
      count = 1;
    }
    if (!/[a-zA-Z0-9\u4e00-\u9fa5]/.test(str[i-1])) {
      result += '#'+str.charCodeAt(i-1);
    }
  }
  return result;
}

字符串解压算法:

  1. 遍历字符串,将数字与字符拆分开来,例如将 '3a' 拆分为 'aaa'。
  2. 将特殊字符替换回原来的字符,例如将 '#1' 替换回 '-'。
  3. 将解压后的字符串保存起来即可。

示例代码:

function decompress(str) {
  let result = '';
  let countStr = '';
  for (let i = 0; i < str.length; i++) {
    if (/\d/.test(str[i])) {
      countStr += str[i];
    } else {
      if (countStr) {
        const count = parseInt(countStr, 10);
        result += str[i].repeat(count);
        countStr = '';
      } else {
        if (str[i] === '#') {
          const charCode = parseInt(str.slice(i+1, i+4), 10);
          result += String.fromCharCode(charCode);
          i += 3;
        } else {
          result += str[i];
        }
      }
    }
  }
  return result;
}

示例测试:

const str = '发-bold-fontSize16-italic';
const compressedStr = compress(str);
console.log(compressedStr); // "发#8203-bold-fontSize16-#8203italic"
const decompressedStr = decompress(compressedStr);
console.log(decompressedStr); // "发-bold-fontSize16-italic"
``
js实现含有汉字、字母、数字的字符串压缩与解压算法例如 发-bold-fontSize16-italic

原文地址: https://www.cveoy.top/t/topic/fIna 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录