纸上得来终觉浅,绝知此事要躬行
- 给定一个字符串,请你将字符串重新编码,将连续的字符替换成“连续出现的个数+字符”。比如字符串AAAABCCDAA会被编码成4A1B2C1D2A。
- 常规解法:遍历字符串
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20var key="AAAABCCDAA",
result="",
lastKey="",
lastCount=0,
currentKey;
for(var i=0;i<key.length;i++){
currentKey=key.substr(i,1);//获取当前字符
if(lastKey==curentKey){//判断当前字符是否读取完毕
lastCount++;//读取当前字符个数
}else{
if(lastKey!=""){
result+=lastKCount+lastKey;//保存当前字符状态
}
lastKey=currentKey;//开始或者当前字符读取完毕重置为下个字符
lastCount=1;//开始或者重置下个字符个数
}
}
//最后一个字符类别补全
result += lastKeyCount + lastKey;
console.log(result); - 正则解法:
第二种方法,replace
方法不多做解释,正则表达式中\1表示原子组,既第一个捕获组,*号表示匹配零个或者多个\1,replace方法第二个参数是个函数,函数两个参数分别为匹配项和第一个捕获组1
2var key="AAAABCCDAA";
var result=key.replace(/(\w)\1*/ig,function(s,v){return s.length+v;})
- 常规解法:遍历字符串