Reducing duplicate characters in a string to a given minimum

十年热恋 提交于 2019-12-03 20:39:08

Just use regular expressions.

var reduceString = function (str, amount) {
    var re = new RegExp("(.)(?=\\1{" + amount + "})","g");
    return str.replace(re, "");
}

I guess my best solution would be like

var str = "axxxaabbbbcaaxxxaab",
 redStr = (s,n) => s.replace(/(\w)\1+/g,"$1".repeat(n));
console.log(redStr(str,2));

I tried to make it as short as possible:

reduceString = function(str, amount) {
    var finalString = '', cL = '', counter;
    str.split('').forEach(function(i){
        if (i !== cL) counter = 0;
        counter++;
        cL = i;
        if (counter <= amount ) finalString = finalString + i;
    });
    return finalString;
}

You can use reg expression instead. tested in javascript.

how it works:

(.) //match any character
\1 //if it follow by the same character
+{2 //more than 1 times
/g //global
$1 //is 1 time by $1$1 is 2 times 

     reduceString('aaaabbbb', 2) 
     reduceString('xaaabbbb', 2) 
            reduceString('aaaabbbb', 1)     
            reduceString('aaxxxaabbbb', 2) 

            function reduceString(txt,num)
            {
                var canRepeat=['$1'];
               for (i=1;i<num;i++)
               {
                  canRepeat.push('$1')
               }
                canRepeat = canRepeat.join('');

                console.log(txt.replace(/(.)\1{2,}/g, canRepeat))

            }      

With regex:

var reduceString = function(str, amount) {
var x = [ ...new Set(str) ];
for (var c of x){
    var rex = new RegExp(c + '{'+amount+',}','g');
    str = str.replace(rex,string(c,amount));
  }
  return str;
};

var string = function(c,amount){
    for(var i=0,s="";i<amount;i++)s+=c;
    return s;
};
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!