2016-06-07 3 views
2

나는 첫 번째 질문 인 Reduce duplicate characters to a desired minimum을 골머리를 앓 았고, 내가 생각해 냈던 것보다 더 우아한 대답을 찾고있다. 그것은 테스트를 통과하지만 다른 솔루션을보기에 호기심이 듭니다. 샘플 테스트는 다음과 같습니다문자열의 중복 문자를 주어진 최소값으로 줄이기

reduceString('aaaabbbb', 2) 'aabb' 
reduceString('xaaabbbb', 2) 'xaabb' 
reduceString('aaaabbbb', 1) 'ab'  
reduceString('aaxxxaabbbb', 2) 'aaxxaabb' 

내 솔루션 (즉,이 테스트를 통과) :

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; 
} 
+0

당신이 원하는처럼 내 최고의 솔루션이 될 것 같아요 순차 반복되는 문자가 아니라 반복? – RobG

+0

@RobG yup은 테스트 대상인 샘플을 기반으로합니다. – Rk220

답변

5

그냥 정규 표현식을 사용

reduceString = function(str, amount) { 
    var count = 0; 
    var result = ''; 
    for (var i = 0; i < str.length; i++) { 
    if (str[i] === str[i+1]) { 
     count++; 
     if (count < amount) { 
     result += str[i]; 
     } 
    } else { 
     count = 0; 
     result += str[i]; 
    } 
    }; 
    return result; 
} 
+0

정규 표현식은 마법을 수행합니까 – iomv

+0

@MarcoValente 확실합니다! – wot

+0

답변을 작성해야합니다.) – iomv

0

나는 가능한 한 짧게 만들려고 .

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

대신 reg 표현식을 사용할 수 있습니다. 자바 스크립트에서 테스트.

그것이 작동하는 방법 : 정규식

(.) //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)) 

      }  
+0

@ e4en을 보면 더 깨끗합니다. :) – chungtinhlakho

0

:

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; 
}; 
0

나는 아마도

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

관련 문제