ตัวละครตัวแรกที่ไม่ซ้ำ

กำหนดสตริง s ให้ค้นหาและส่งกลับอินสแตนซ์แรกของอักขระที่ไม่ซ้ำในนั้น หากไม่มีอักขระดังกล่าว ให้ส่งคืน '_'

ตัวอย่าง

  • สำหรับ s = "abacabad" ผลลัพธ์ควรเป็น
    firstNotRepeatingCharacter(s) = 'c'
  • มีอักขระที่ไม่ซ้ำ 2 ตัวในสตริง: 'c'และ 'd' ส่งกลับ c เนื่องจากปรากฏในสตริงก่อน
  • สำหรับ s = "abacabaabacaba" ผลลัพธ์ควรเป็น
    firstNotRepeatingCharacter(s) = '_'
  • ไม่มีอักขระในสตริงนี้ที่ไม่ซ้ำ

ก่อนอื่น s.length สามารถเท่ากับ 1 เพื่อให้เราสามารถจัดการกรณีนั้นได้ทันที!

function firstNotRepeatingCharacter(s) {
  if (s.length === 1) return s;
}

ต่อไป ฉันจะแยกสตริงออกเป็นอาร์เรย์ จากนั้นฉันวนซ้ำอาร์เรย์และตรวจสอบว่าดัชนีแรกของอักขระปัจจุบันเท่ากับดัชนีสุดท้ายหรือไม่ หากเป็นเช่นนั้น เราก็จะมีอักขระตัวแรกที่ไม่ซ้ำแล้วจึงส่งคืน

const chars = s.split('');
for (let i = 0; i < chars.length; i++) {
  const char = chars[i];
  if (chars.indexOf(char) === chars.lastIndexOf(char)) return char;
}

หากไม่มีอักขระใดตรงกัน เราจะส่งคืน _ นี่คืออัลกอริธึมทั้งหมดด้วยกัน!

function firstNotRepeatingCharacter(s) {
  if (s.length === 1) return s;
  const chars = s.split('');
  for (let i = 0; i < chars.length; i++) {
    const char = chars[i];
    if (chars.indexOf(char) === chars.lastIndexOf(char)) return char;
  }
  return '_';
}

ฉันแน่ใจว่ามีวิธีที่ดีกว่าและเร็วกว่ามากในการแก้ปัญหานี้ วางโซลูชันของคุณในความคิดเห็นด้านล่าง!