ปัญหา
เราต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ของสตริง สตริงทุกตัวในอาร์เรย์มีตัวอักษรเหมือนกัน (หรือซ้ำกัน) และมีเพียงสตริงเดียวที่มีชุดตัวอักษรต่างออกไป ฟังก์ชันควรหาและคืนค่าสตริงนั้น
ตัวอย่าง
ถ้าอาร์เรย์คือ:
['ba', 'abc', 'acb', 'bac', 'foo', 'bca', 'cab', 'cba']
สตริงที่ต้องการคือ 'foo'
สตริงอาจมีช่องว่าง ช่องว่างไม่สำคัญ เฉพาะสัญลักษณ์ที่ไม่ใช่ช่องว่างเท่านั้น ตัวอย่าง สตริงที่มีแต่ช่องว่าง คล้ายสตริงว่าง 保证อาร์เรย์มีมากกว่า 3 สตริง
ตัวอย่าง
โค้ดตัวอย่างด้านล่าง:
const arr = ['ba', 'abc', 'acb', 'bac', 'foo', 'bca', 'cab', 'cba'];
const findOnlyUnique = (arr = []) => {
const first = [];
for (i = 0; i < arr.length; i++) {
first.push(arr[i].toLowerCase().replace(/\s/g, '').split(''));
for (j = 0; j < arr[i].length; j++) {
first[i].sort();
}
}
const second = [];
for (k = 0; k < arr.length; k++) {
second.push(first[k].join());
}
second.sort();
const third = [];
if (second[1] !== second[second.length - 1]) {
third.push(second[second.length - 1]);
} else {
third.push(second[0]);
}
const last = [];
for (let n = 0; n < first.length; n++) {
last.push(first[n].join(','));
}
return (arr[last.indexOf(third[0])]);
};
console.log(findOnlyUnique(arr));
ผลลัพธ์
foo
คำอธิบายเพิ่มเติม
โค้ดจัดการโดย: 1) ลบช่องว่าง lowercase 2) แยกตัวอักษร sort 3) join เป็นสตริง signature 4) sort signatures 5) หาตัวที่แตกต่าง (อยู่ปลายหรือต้น) 6) map กลับหาสตริงต้นฉบับ วิธีนี้ O(n × k log k) โดย k = ความยาวสตริง