字符串压缩

### 题目

字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。

示例1:

输入:"aabcccccaaa"

输出:"a2b1c5a3"

示例2:

输入:"abbccd"

输出:"abbccd"

解释:"abbccd"压缩后为"a1b2c2d1",比原字符串长度更长。

提示:

字符串长度在[0, 50000]范围内。

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/compress-string-lcci

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

### 代码

```javascript

var compressString = function(S) {

  // 初始化一个最终的字符串结果

  let endString = ''

// 截取最后数字的正则

  let endNumberReg = /[0-9]*$/

// 截取最后数字和前一个字母的正则

  let endWordReg = /[a-zA-Z][0-9]*$/

  for(let i = 0; i < S.length; i++) {

    // 因为题目说最多50000个字符串,所以匹配最后一个字母加数字的时候,把之前的字符串全部干掉

    let matchWord = endString.substring(endString.length - 5, endString.length).match(endWordReg)

    // 如果相等就加1,不相等则等于1

    if (matchWord && matchWord[0][0] == S[i]) {

      let index = (matchWord[0].substring(1, matchWord[0].length)) ^ 0

      endString = endString.replace(endNumberReg, ++index)

    } else {

      endString += S[i] + '1'

    }

  // 题目说如果最终的字符串长度大于或者等于 初始的字符串长度就返回初始的

    if (endString.length >= S.length) {

      break;

    }

  }

  endString = endString.length >= S.length ? S : endString;

  return endString

};

```

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容