zoukankan      html  css  js  c++  java
  • 443.压缩字符串

    2020-05-12
    压缩字符串

    给定一组字符,使用原地算法将其压缩。

    压缩后的长度必须始终小于或等于原数组长度。

    数组的每个元素应该是长度为1 的字符(不是 int 整数类型)。

    在完成原地修改输入数组后,返回数组的新长度。

    进阶:
    你能否仅使用O(1) 空间解决问题?
    题解:
    思路1:数组截取插入
    /**
     * @param {character[]} chars
     * @return {number}
     */
    var compress = function (chars) {
      if (chars.length < 2) return chars.length; // len<2直接返回
      let num = 1; // 记录重复的字符的个数
      for (let i = 1; i < chars.length; i++) {
        if (chars[i] === chars[i - 1]) num++; // 如果与前一项相等 num++
        else if (num > 1) { // 如果不等且num大于1 那么需要把重复的字符转为数字
          chars.splice(i - num + 1, num - 1, ...num.toString().split('')); // 只保留重复字符的第一个 其他全部删掉 再将num插入进去
          i = i - (num - 1) + 1; // 重写i的位置 因为删掉了重复的字符 所以i的位置会有变化
          num = 1; // 重置num为1 满足下一次的计数
        }
      }
      if (num > 1) { // 遍历完后如果num > 1 说明最后几个字符是相等的 例如:a2b2ccccccc 这种情况 再对最后一个重复字符处理
        chars.splice(chars.length - num + 1, num - 1, ...num.toString().split(''));
      }
      return chars.length; 
    };
  • 相关阅读:
    final,static,this,super 关键字总结
    Java基础知识(三)
    Java基础知识(二)
    Java基础知识(一)
    MyBatis重要核心概念
    Mybatis执行SQL的完整过程及四大组件介绍
    Mybatis之plugin插件设计原理
    Spring MVC 9大组件概述
    Log4j的使用
    Git的介绍及使用
  • 原文地址:https://www.cnblogs.com/lanpang9661/p/12875567.html
Copyright © 2011-2022 走看看