代码:
/**
* @param {string} S
* @return {string}
*/
var compressString = function(S) {
let count=1;
let str = new String() ;
for(let i = 1 ; i < S.length+1 ; i++){
if(S[i-1] === S[i]){
count++
}else{
str +=S.slice(i-1,i )+ count
count = 1
}
}
return S.length > str.length ? str : S
};
初始化的时候i是1,这样加上count的时候,总是最后一个。这个思路很妙。
正则
/([A-z])\1*/g
/(.)\1*/匹配一个任意字符并在其后重复0次以上,
// 正则匹配法
var compressString = function(S) {
let res = ''
let sReg = S.match(/([A-z])\1*/g)
if(sReg){
sReg.forEach(e=>{
res += e.charAt(0)+e.length
})
}
return res.length < S.length ? res : S
};
双指针
//双指针法
var compressString = function(S) {
let res = ""
let i = 0, j = 0
while (j < S.length - 1) {
if (S[j] !== S[j + 1]) {
res += S[i] + (j+1 - i)
i = j+1
}
j++
}
res += S[i] + (j - i + 1)
return res.length < S.length ? res : S
};