Để 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:
-
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.
-
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.
-
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