Nguyên âm trong tiếng Anh: a, e, i, o, u (cả chữ thường và hoa). Để đếm chính xác, cần chuẩn hóa hoặc kiểm tra cả hai trường hợp.
Thuật toán
- Định nghĩa chuỗi chứa tất cả nguyên âm:
'aAeEiIoOuU'. - Duyệt từng ký tự của chuỗi đầu vào.
- Kiểm tra xem ký tự có nằm trong chuỗi nguyên âm không (
indexOf() !== -1). - Tăng bộ đếm khi tìm thấy.
Code hoàn chỉnh
<script>
function demNguyenAm(str) {
const nguyenAm = 'aAeEiIoOuU';
let count = 0;
for (let i = 0; i < str.length; i++) {
if (nguyenAm.indexOf(str[i]) !== -1) {
count++;
}
}
return count;
}
// Test
const chuoi = "Tutorix is one of the best e-platforms";
document.write(demNguyenAm(chuoi)); // 12
</script>
Kết quả
12
Cách hiện đại hơn (ES6+)
function demNguyenAmModern(str) {
return (str.match(/[aeiou]/gi) || []).length;
}
// /gi: global + case-insensitive
// match() trả về mảng khớp hoặc null → dùng || [] để tránh lỗi
So sánh hiệu suất
| Phương pháp | Độ phức tạp | Đọc hiểu | Hiệu suất |
|---|---|---|---|
| Vòng lặp + indexOf | O(n) | Dễ hiểu | Tốt |
| Regex match | O(n) | Ngắn gọn | Tốt (tối ưu engine) |
| Reduce + Set | O(n) | Functional | Hơi chậm hơn |
Lưu ý
- Chuỗi rỗng hoặc null → trả về 0.
- Ký tự Unicode (à, é, ô...) không được đếm — cần mở rộng regex nếu hỗ trợ tiếng Việt.