Computer >> Máy Tính >  >> Lập trình >> Javascript

Đặt các ký tự chuỗi giống nhau trong JavaScript

Vấn đề

Chúng tôi được yêu cầu viết một hàm JavaScript nhận một chuỗi ký tự, str, làm đối số đầu tiên và một số, num, (num <<độ dài của chuỗi str) làm đối số thứ hai.

Hàm nên sắp xếp lại các ký tự của chuỗi str và xây dựng một chuỗi mới sao cho không có hai ký tự giống nhau nào cách nhau ít hơn ký tự num, nói cách khác, các ký tự tương tự phải có khoảng cách tối thiểu là ký tự num.

Sau đó, hàm cuối cùng sẽ trả về chuỗi được xây dựng mới. Và nếu không thể đạt được sự sắp xếp này, hàm của chúng ta sẽ trả về một chuỗi trống.

Ví dụ:nếu đầu vào của hàm là -

const str = 'kkllmm';

Sau đó, đầu ra phải là -

const output = 'mlmklk';

Ví dụ

Mã cho điều này sẽ là -

const str = 'kkllmm';
const placeApart = (str = '') => {
   const map = {};
   for(let i=0; i<str.length; i++){
      map[str[i]] = map[str[i]] || 0;
      map[str[i]] ++;
   }
   let keys = Object.keys(map).sort((a,b)=>{
      if(map[a]<map[b])
      return 1;
      return -1;
   });
   let len = str.length%2 ? (Math.floor(str.length/2)+1) : str.length/2;
   if(map[keys[0]] > len){
      return "";
   };
   const res = [];
   let index = 0, max = str.length-1;
   while(keys.length){
      let currKey = keys.shift();
      let count = map[currKey];
      while(count){
         res[index] = currKey;
         index = index+2;
         if(index>max)
            index=1;
            count--;
      }
   }
   return res.join("");
};
console.log(placeApart(str));

Đầu ra

Và đầu ra trong bảng điều khiển sẽ là -

mlmklk