ภาพรวม
บทความนี้สาธิตวิธีหาสตริงตัวแรกในอาร์เรย์ที่ไม่มีตัวอักษรซ้ำกันภายในตัวเอง (All Unique Characters)
ตัวอย่าง
const arr = ['54gdgdfe3', '434ffd', '43frdf', '43fdhnh', 'wgcxhjny', 'fsdf34'];
// 'wgcxhjny' -> ทุกตัวอักษรไม่ซ้ำ -> ผลลัพธ์
การนำไปใช้
const isUnique = (str) =>
[...str].every((char, i, arr) => arr.indexOf(char) === i);
const findUniqueString = (arr) => {
for (const str of arr) {
if (isUnique(str)) return str;
}
return false;
};
console.log(findUniqueString(arr)); // 'wgcxhjny'
ผลลัพธ์
wgcxhjny
วิธีการที่มีประสิทธิภาพมากกว่า (O(n) ต่อสตริง)
const isUniqueFast = (str) => {
const seen = new Set();
for (const char of str) {
if (seen.has(char)) return false;
seen.add(char);
}
return true;
};
// หรือ One-liner
const isUniqueOneLine = (str) => new Set(str).size === str.length;
Bit Vector Approach (สำหรับ a-z เท่านั้น, O(1) Space)
const isUniqueBitVector = (str) => {
let checker = 0;
for (const char of str) {
const val = char.charCodeAt(0) - 97; // 'a' = 97
if (val < 0 || val > 25) continue; // ข้าม non a-z
if (checker & (1 << val)) return false;
checker |= (1 << val);
}
return true;
};
การประยุกต์ใช้
- Password Validation: ตรวจสอบตัวอักษรไม่ซ้ำ
- Pangram Detection: ตรวจสอบครบ a-z
- Data Deduplication
- Cryptanalysis: Substitution Cipher Analysis
ข้อควรระวัง
- Case Sensitivity: 'A' != 'a'
- Unicode: Set และ [...str] รองรับได้ดี
- Performance: Bit Vector เร็วสุดแต่จำกัด Character Set