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

Tìm ký tự xuất hiện nhiều nhất trong chuỗi C#

Tìm ký tự max frequency: Dictionary đếm + MaxBy (LINQ) hoặc Aggregate.

Ví dụ minh họa

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

class Program
{
    static void Main()
    {
        string s = "livelife!";
        
        Console.WriteLine($"Chuỗi: \"{s}\"");
        
        // Cách 1: LINQ GroupBy + MaxBy (.NET 6+)
        var maxChar = s.GroupBy(c => c)
                       .MaxBy(g => g.Count());
        Console.WriteLine($"\nMaxBy (NET6+): '{maxChar.Key}' - {maxChar.Count()} lần");
        
        // Cách 2: Dictionary + Aggregate (tương thích cũ)
        var counts = new Dictionary();
        foreach (char c in s)
            counts[c] = counts.GetValueOrDefault(c) + 1;
        
        var max = counts.Aggregate((x, y) => x.Value > y.Value ? x : y);
        Console.WriteLine($"Aggregate: '{max.Key}' - {max.Value} lần");
        
        // Cách 3: Tất cả tần suất
        Console.WriteLine("\nTất cả tần suất:");
        foreach (var kvp in counts.OrderByDescending(x => x.Value).ThenBy(x => x.Key))
            Console.WriteLine($"'{kvp.Key}': {kvp.Value} {(kvp.Value == 1 ? "lần" : "lần")}");
    }
}

Kết quả đầu ra

Chuỗi: "livelife!"

MaxBy (NET6+): 'i' - 3 lần
Aggregate: 'i' - 3 lần

Tất cả tần suất:
'i': 3 lần
'l': 2 lần
'e': 2 lần
'v': 1 lần
'f': 1 lần
'!': 1 lần

Lưu ý: Code gốc in ra 'e', 'i', 'l' đều 2 lần - sai vì chuỗi "livelife!" có 'i' xuất hiện 3 lần (lvelife!). Code sửa đã cho kết quả đúng.