ตัวละครตัวแรกที่ไม่ซ้ำ
กำหนดสตริง 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 '_'; }
ฉันแน่ใจว่ามีวิธีที่ดีกว่าและเร็วกว่ามากในการแก้ปัญหานี้ วางโซลูชันของคุณในความคิดเห็นด้านล่าง!