字符串压缩

给定由普通英文字母组成的非空字符串s1,要求将连续出现的字符压缩成字符和该字符连续出现的次数,并返回新的字符串s2。s1字符串的长度不超过100

输入描述:
全部由普通英文字符组成的长度不超过100的字符串 。

输出描述:
由英文字符和数字组成的字符串,其中数字表示它前面的字符在输入字符串中连续出现的次数

示例

输入:
aabccccaaa

输出:
a2bc4a3

时间复杂度:O(n)
空间复杂度:O(1)

var inputString = "aadccssssf"; //输入字符串

function stringCompress(inputString) {
	var reg = /^[A-Za-z]{1,100}$/; //长度为不大于100且只包括字母的非空字符串
	var res = "";
	if(reg.test(inputString)) {
		var count = 1; 
		for (var i = 0; i < inputString.length; i++) {
			var victim = inputString.charAt(i); //每次取当前字符进行接下来是否重复的判断
			var j=i+1;
			res=res+victim; //将当前字符加入结果字符串
			while(inputString.charAt(j)==victim){
				count++; //记录重复的个数
				j++;
			}
			if(count!=1) { //只有出现重复才需要进行下面的处理,没有重复就跳过开始处理下一个字符
				res=res+count; //若重复了,则将重复次数输出到结果字符串
				i=i+count-1; //更新下一个要处理的字符的index
				count=1; //重置重复次数为1,即出现一次
			}
		}
		return res; //返回结果
	}
	else if(inputString.length==0) { //空串控制
		return "Invalid input: empty string."
	}
	else if(inputString.length>100) { //长度控制
		return "Input string too long, please input string no more than 100 characters.";
	}
	else { //非法字符控制
		return "String include invalid characters.";
	}
}

console.log(stringCompress(inputString));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值