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

Chương trình C# đếm số lần xuất hiện của mỗi ký tự

Duyệt chuỗi, đếm tần suất từng ký tự distinct. Cách đơn giản: lặp ngoài lấy ký tự đầu, đếm trong chuỗi còn lại, sau đó xóa tất cả ký tự đó — lặp cho đến khi chuỗi rỗng.

Mã nguồn (cách gốc)

using System;

public class Demo {
    public static void Main() {
        string str = "Website";
        Console.WriteLine("Chuỗi: " + str);
        
        while (str.Length > 0) {
            char first = str[0];
            int count = 0;
            
            // Đếm xuất hiện của first trong str
            for (int j = 0; j < str.Length; j++) {
                if (str[j] == first) count++;
            }
            
            Console.WriteLine(first + " = " + count);
            
            // Xóa tất cả ký tự first khỏi chuỗi
            str = str.Replace(first.ToString(), string.Empty);
        }
        Console.ReadLine();
    }
}

Kết quả

Chuỗi: Website
W = 1
e = 2
b = 1
s = 1
i = 1
t = 1

Cách hiệu quả hơn: Dictionary / LINQ GroupBy

using System.Linq;
using System.Collections.Generic;

// Dictionary
var freq = new Dictionary();
foreach (char c in str) {
    freq[c] = freq.GetValueOrDefault(c, 0) + 1;
}

// LINQ GroupBy
var groups = str.GroupBy(c => c)
                .Select(g => new { Char = g.Key, Count = g.Count() })
                .OrderByDescending(x => x.Count);

foreach (var g in groups) {
    Console.WriteLine($"{g.Char} = {g.Count}");
}

So sánh

Phương phápĐộ phức tạpBộ nhớThứ tự xuất
Replace + Loop (gốc)O(n²)O(n) string mớiTheo thứ tự xuất hiện đầu tiên
DictionaryO(n)O(k) distinct charsKhông đảm bảo
LINQ GroupByO(n log k)O(k)Có thể sort

Lưu ý

  • Cách gốc sửa đổi chuỗi gốc (tạo string mới mỗi lần Replace) — kém hiệu năng với chuỗi dài.
  • Dictionary nhanh nhất O(n), phù hợp production.
  • Đếm không phân biệt hoa/thường: char.ToLower(c) khi dùng làm key.