×

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

Để kiểm tra xem hai chuỗi có phải là anagram của nhau hay không trong JavaScript, bạn có thể sử dụng các phương pháp như sắp xếp ký tự hoặc đếm số lần xuất hiện của ký tự. Dưới đây là hướng dẫn chi tiết cho cả hai phương pháp.

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 chuỗi về chữ thường để so sánh không phân biệt chữ hoa 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 Ký Tự:

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

    • charCount: Tạo đối tượng để đếm số lần xuất hiện của mỗi 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 Ký Tự: Phương pháp đơn giản và dễ hiểu, nhưng yêu cầu sắp xếp toàn bộ ký tự.
  • Đếm Ký Tự: Hiệu quả hơn cho các chuỗi dài, không yêu cầu sắp xếp và sử dụng bộ nhớ phụ ít hơn.

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à anagram của nhau, trong khi "Hello" và "World" không phải.

Comments