JavaScript字符串压缩_js实现字符串压缩

时间: 2018-10-29阅读: 7753标签: 算法

描述

设计一种方法,通过给重复字符计数来进行基本的字符串压缩。 

例如,字符串 aabcccccaaa 可压缩为 a2b1c5a3 。而如果压缩后的字符数不小于原始的字符数,则返回原始的字符串。 可以假设字符串仅包括a-z的字母。


样例

str=aabcccccaaa 返回 a2b1c5a3 
str=aabbcc 返回 aabbcc 
str=aaaa 返回 a4


代码实现:

//取出字符串,判断重复停止,添加到新字符串中
function solution(str) {
  if(typeof str !== "string"){//类型不为字符串返回空
  	return '';
  }
  if (str.length <= 1){//直接返回源字符串
  	return str; 
  }
  let newStr = '';
  let s = str.charAt(0);
  let num = 1; //跳过第一个
  let total = str.length;
  for (let i = 1; i < total; i++) {
    let nowS = str.charAt(i);
    if (nowS === s) {
      num = num + 1; // 增加数量
      if (i + 1 === total) {
        newStr += `${s}${num}`; // 遍历结束时,拼接最后的字符串
      }
    } else {
      newStr += `${s}${num}`; // 拼接字符串
      num = 1; // 重置为1
      s = nowS; // 转为下一个字符s
    }
  }
  if (newStr.length >= str.length) {// 生成的字符串长度大于等于源字符串 返回源字符串 否则返回生成的字符串
    return str;
  } else {
    return newStr;
  }
};

console.log(
  '输出:',
  solution('aabcccccaaa'), // a2b1c5a3 
  solution('aabbcc'), // aabbcc
  solution('aaaa'), // a4
  solution('a'), // a
  solution('') // ''
);


站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

2.广告联盟: 整理了目前主流的广告联盟平台,如果你有流量,可以作为参考选择适合你的平台点击进入

链接: http://www.fly63.com/article/detial/1207

关闭

Vue2.x的diff算法记录

为什么在Vue3.0都已经出来这么久了我还要写这篇文章,因为目前自己还在阅读Vue2.x的源码,感觉有所悟。作为一个刚毕业的新人,对Vue框架的整体设计和架构突然有了一点认知,所以才没头没尾地突然写下了diff算法。

Js实现插入排序

插入排序是一种非常简单的算法,最适合大部分已经被排好序的数据。在开始之前,通过可视化演示算法如何运作一个好主意。你可以参考前面的动画来了解插入排序的工作原理。

js从数组取出 连续的 数字_实现一维数组中连续数字分成几个连续的数字数组

使用原生js将一维数组中,包含连续的数字分成一个二维数组,这篇文章分2种情况介绍如何实现?1、过滤单个数字;2、包含单个数字。

JS数据结构与算法_链表

链表更加像是数组。链表和数组都是用于存储有序元素的集合,但有几点大不相同,链表的实现不像之前介绍的栈和队列一般依赖于数组(至少我们目前是这样实现的),它必须自己构建类并组织逻辑实现。我们先创建一个Node类

JavaScript算法练习:乌托邦树

对于今天的算法,我们要写一个叫做 utopianTree 的函数,它只接受一个输入:一个整数 n。我们有一棵乌托邦树,每年要经历2个增长周期。在春季,高度增加一倍,在夏季,高度增加1(无论您要使用哪种测量系统)

PageRank算法的定义与来源、以及PageRank算法原理

PageRank,网页排名,又称网页级别、Google左侧排名或佩奇排名,是一种由 根据网页之间相互的超链接计算的技术,而作为网页排名的要素之一,以Google公司创办人拉里·佩奇(Larry Page)之姓来命名。

六种排序算法的Js实现

本文将介绍数据排序的基本算法和高级算法。这些算法都只依赖数组来存储数据。数组测试平台首先我们构造一个数组测试平台类,这些算法非常逼真地模拟了人类在现实生活中对数据的排序。

js实现链表_javascript中的链表结构

很多编程语言中数组的长度是固定的,就是定义数组的时候需要定义数组的长度,所以当数组已经被数据填满的时候,需要再加入新的元素就很困难。只能说在部分变成语言中会有这种情况,在javascript中和php中数组的长度是可以任意增加的。avascript中有一个很方便的方法splice()方法很方便的就可以添加或删除元素。

js求水仙花数_JavaScript可自定义范围打印水仙花数

水仙花数是指一个 n 位正整数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。这篇文章主要介绍js实现生成自定义范围内的水仙花数。

js字典树算法_Trie树(字典树)实现与应用

字典树又称Trie树、前缀字,单词查找树,是一种树形结构,是一种哈希树的变种,是一种用于快速检索的多叉树结构。 字典树是处理字符串常见的一种树形数据结构

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!