给定由普通英文字母组成的非空字符串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));