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#


Ký tự xuất hiện nhiều nhất trong chuỗi là ký tự có số lần xuất hiện lớn nhất. Ví dụ: chuỗi "apples are red" - ký tự 'e' xuất hiện 3 lần, nhiều hơn bất kỳ ký tự nào khác.

Ví dụ

using System;

namespace CharCountDemo
{
    public class Example
    {
        public static void Main()
        {
            String str = "abracadabra";
            int[] charCount = new int[256]; // Bảng ASCII
            int length = str.Length;
            
            // Đếm tần suất
            for (int i = 0; i < length; i++)
                charCount[str[i]]++;
            
            // Tìm max
            int maxCount = -1;
            char character = ' ';
            
            for (int i = 0; i < length; i++)
            {
                if (maxCount < charCount[str[i]])
                {
                    maxCount = charCount[str[i]];
                    character = str[i];
                }
            }
            
            Console.WriteLine("Chuỗi: " + str);
            Console.WriteLine("Ký tự xuất hiện nhiều nhất: " + character);
            Console.WriteLine("Số lần xuất hiện: " + maxCount);
        }
    }
}

Kết quả

Chuỗi: abracadabra
Ký tự xuất hiện nhiều nhất: a
Số lần xuất hiện: 5

Giải thích

  • Mảng charCount[256] lưu tần suất cho mỗi mã ASCII
  • Duyệt chuỗi, tăng đếm tại index = mã ký tự
  • Duyệt lại để tìm giá trị max và ký tự tương ứng

Cải tiến cho Unicode: Dùng Dictionary<char, int> thay vì mảng cố định:

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

var max = counts.Max(kvp => kvp.Value);
var mostFrequent = counts.First(kvp => kvp.Value == max).Key;

Lưu ý: Nếu có nhiều ký tự cùng tần suất max, thuật toán trên trả về ký tự xuất hiện trước trong chuỗi.