×

Kiểm Tra Hai Chuỗi Có Phải Là Anagram Của Nhau Trong JavaScript

Anagram là hai chuỗi được tạo thành từ cùng một tập hợp các ký tự nhưng với thứ tự khác nhau. Ví dụ, "listen" và "silent" là các anagram của nhau. Dưới đây là hai phương pháp để kiểm tra xem hai chuỗi có phải là anagram của nhau hay không trong JavaScript.

Mã Nguồn:

Phương Pháp 1: Sử Dụng Sắp Xếp

function areAnagrams(str1, str2) {
    // Chuyển chuỗi về chữ thường và loại bỏ các ký tự không phải là chữ cái và số
    let cleanedStr1 = str1.toLowerCase().replace(/[^a-z0-9]/g, '');
    let cleanedStr2 = str2.toLowerCase().replace(/[^a-z0-9]/g, '');

    // So sánh độ dài của hai chuỗi sau khi đã làm sạch
    if (cleanedStr1.length !== cleanedStr2.length) {
        return false;
    }

    // Sắp xếp các ký tự và so sánh
    let sortedStr1 = cleanedStr1.split('').sort().join('');
    let sortedStr2 = cleanedStr2.split('').sort().join('');

    return sortedStr1 === sortedStr2;
}

// Ví dụ kiểm tra
console.log(areAnagrams("Listen", "Silent")); // true
console.log(areAnagrams("Hello", "World")); // false

Phương Pháp 2: Sử Dụng Đếm Ký Tự

function areAnagrams(str1, str2) {
    // Chuyển chuỗi về chữ thường và loại bỏ các ký tự không phải là chữ cái và số
    let cleanedStr1 = str1.toLowerCase().replace(/[^a-z0-9]/g, '');
    let cleanedStr2 = str2.toLowerCase().replace(/[^a-z0-9]/g, '');

    // So sánh độ dài của hai chuỗi sau khi đã làm sạch
    if (cleanedStr1.length !== cleanedStr2.length) {
        return false;
    }

    // Tạo đối tượng để đếm số lần xuất hiện của từng ký tự
    let charCount = {};

    for (let char of cleanedStr1) {
        charCount[char] = (charCount[char] || 0) + 1;
    }

    for (let char of cleanedStr2) {
        if (!charCount[char]) {
            return false;
        }
        charCount[char] -= 1;
    }

    return true;
}

// Ví dụ kiểm tra
console.log(areAnagrams("Listen", "Silent")); // true
console.log(areAnagrams("Hello", "World")); // false

Giải Thích:

  1. Chuẩn Hóa Chuỗi:

    • toLowerCase(): Chuyển toàn bộ chuỗi về chữ thường.
    • replace(/[^a-z0-9]/g, ''): Loại bỏ các ký tự không phải là chữ cái và số để chuẩn hóa chuỗi.
  2. Phương Pháp 1: Sắp Xếp:

    • split(''): Chuyển chuỗi thành mảng các ký tự.
    • sort(): Sắp xếp các ký tự.
    • join(''): Kết hợp các ký tự thành chuỗi.
    • So sánh hai chuỗi đã sắp xếp.
  3. Phương Pháp 2: Đếm Ký Tự:

    • charCount: Tạo một đối tượng để đếm số lần xuất hiện của từng ký tự trong chuỗi đầu tiên.
    • Duyệt Chuỗi Thứ Hai: Kiểm tra từng ký tự và cập nhật đếm trong đối tượng. Nếu không tìm thấy ký tự hoặc số lần xuất hiện không khớp, không phải anagram.

Tổng Quan:

  • Anagram: Hai chuỗi có thể tạo thành nhau bằng cách sắp xếp lại ký tự.
  • Sắp Xếp: Phương pháp đơn giản, dễ hiểu.
  • Đếm Ký Tự: Hiệu quả hơn cho các chuỗi dài và không cần sắp xếp toàn bộ ký tự.

Ví Dụ Thực Tế:

console.log(areAnagrams("Listen", "Silent")); // true
console.log(areAnagrams("Hello", "World")); // false

Trong ví dụ trên, "Listen" và "Silent" là các anagram của nhau, trong khi "Hello" và "World" không phải.

Comments