Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

การหาสตริงที่ไม่ซ้ำเพียงตัวเดียวในอาร์เรย์ด้วย JavaScript

ปัญหา

เราต้องเขียนฟังก์ชัน 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 = ความยาวสตริง