Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Chương trình C# kiểm tra chuỗi Pangram (chứa toàn bộ bảng chữ cái)

Pangram (chuỗi hoàn hảo) là câu chứa tất cả 26 chữ cái của bảng chữ cái tiếng Anh ít nhất một lần. Ví dụ kinh điển: "The quick brown fox jumps over the lazy dog".

Mã nguồn (LINQ - ngắn gọn)


using System;
using System.Linq;

namespace Demo {
    public class Program {
        public static void Main(string[] args) {
            string str = "The quick brown fox jumps over the lazy dog";
            
            bool isPangram = CheckPangram(str);
            Console.WriteLine($"{isPangram}: \"{str}\" is pangram");
            Console.ReadKey();
        }
        
        static bool CheckPangram(string str) {
            // Chuyển thường, lọc chỉ chữ cái, nhóm distinct, đếm
            return str.ToLower()
                      .Where(ch => char.IsLetter(ch))
                      .GroupBy(ch => ch)
                      .Count() == 26;
        }
    }
}

Kết quả


True: "The quick brown fox jumps over the lazy dog" is pangram

Giải thích LINQ

  1. ToLower(): Chuẩn hóa về chữ thường.
  2. Where(ch => char.IsLetter(ch)): Lọc chỉ giữ chữ cái (bỏ số, space, dấu câu).
  3. GroupBy(ch => ch): Nhóm các ký tự giống nhau.
  4. Count(): Đếm số nhóm distinct = số chữ cái khác nhau.
  5. So sánh với 26.

Cách tối ưu O(n) không dùng LINQ (Bitmask)


static bool IsPangramFast(string s) {
    int mask = 0;
    foreach (char c in s) {
        if (char.IsLetter(c)) {
            int bit = char.ToLower(c) - 'a';
            if (bit >= 0 && bit < 26) mask |= (1 << bit);
            if (mask == 0x3FFFFFF) return true; // 26 bit thấp đều = 1
        }
    }
    return mask == 0x3FFFFFF;
}

So sánh

Phương phápĐộ phức tạpBộ nhớGhi chú
LINQ GroupByO(n log n)O(k)Dễ đọc, đủ nhanh cho chuỗi ngắn
Bitmask (int 32-bit)O(n)O(1)Nhanh nhất, không cấp phát
HashSet<char>O(n)O(k)Cân bằng
bool[26] arrayO(n)O(1)Đơn giản, dễ hiểu

Lưu ý

  • char.IsLetter hỗ trợ Unicode — nếu chỉ muốn A-Z, dùng c >= 'a' && c <= 'z' sau ToLower.
  • Pangram tiếng Việt: cần 29 chữ cái (a-z + ă, â, đ, ê, ô, ơ, ư) — logic tương tự nhưng mask 32-bit vẫn đủ.
  • Perfect pangram: mỗi chữ cái xuất hiện đúng 1 lần (26 ký tự chữ cái chính xác).