เราต้องเขียนฟังก์ชัน JavaScript ที่รับสตริงที่มีตัวอักษรซ้ำ และคืนค่าสตริงใหม่ที่ตัวอักษรเดียวกันทั้งหมดห่างกัน n ตัวอักษรพอดี และ n ต้องน้อยกว่าความยาวอาร์เรย์
เช่น
ถ้าสตริงอินพุทคือ: "accessories" และ n คือ 3 ค่าที่คืนควรเป็น: "secrsecisao"
หมายเหตุ - อาจมีวิธีจัดเรียงอื่นที่ได้ผลลัพธ์ที่ต้องการ ลำดับไม่สำคัญ ตราบใดที่ตรรกะถูกต้อง ผลลัพธ์ก็ถูกต้อง
มาเขียนโค้ดสำหรับฟังก์ชันนี้กัน
ตัวอย่าง
const str = 'accessories';
const equalDistance = (str, num) => {
const map = str.split("").reduce((acc, val) => {
const count = acc.get(val);
if(typeof count === 'number'){
acc.set(val, count+1);
}else{
acc.set(val, 1);
};
return acc;
}, new Map());
const arr = Array.from(map).sort((a, b) => b[1] - a[1]);
let newString = '';
for(let i = 0, count = 0; i < str.length;){
if(!arr[count][1]){
arr.splice(count, 1);
continue;
};
newString += arr[count][0];
arr[count][1]--;
i++;
count = i % num;
};
return newString;
};
console.log(equalDistance(str, 4));
console.log(equalDistance('abb', 2));
console.log(equalDistance('aacbbc', 3));
ผลลัพธ์
ผลลัพธ์ในคอนโซลจะเป็นดังนี้
sceasceosri bab acbacb