在 JavaScript 中将相同字符串字符分开


问题

我们需要编写一个 JavaScript 函数,它接收一个字符串(作为第一个参数)和一个数字(比输入字符串的长度小)作为第二个参数。

该函数应重新排列字符串 str 的字符并构建一个新字符串,使得没有两个相似字符间隔小于 num 个字符(换句话说,相似字符应该至少相隔 num 个字符)。

该函数最终应该返回新构建的字符串。如果无法实现这种排列,我们的函数应返回一个空字符串。

例如,如果输入函数的内容为 -

const str = 'kkllmm';

输出应为 -

const output = 'mlmklk';

示例

对应的代码为 -

 实时演示

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));

输出

控制台中的输出为 -

mlmklk

更新日期: 18-Mar-2021

108 次浏览

职业起步

完成课程获得认证

开始学习
广告