C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#で文字列内の最頻出文字を取得する方法をわかりやすく解説

文字列における「最頻出文字」とは、その文字列の中で最も多く出現する文字のことです。まず、以下の例で具体的なイメージをつかんでみましょう。

文字列:apples are red
上記の文字列で最も多く出現している文字は「e」で、出現回数は3回です。
これは他のどの文字よりも多い出現回数となっています。

それでは、C#を使用して文字列内の最頻出文字を取得するプログラムを見ていきましょう。

サンプルプログラム

using System;
namespace charCountDemo {
    public class Example {
        public static void Main() {
            String str = "abracadabra";
            int []charCount = new int[256];
            int length = str.Length;
            for (int i = 0; i < length; i++) {
                charCount[str[i]]++;
            }
            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("The string is: " + str);
            Console.WriteLine("The highest occurring character in the above string is: " + character);
            Console.WriteLine("Number of times this character occurs: " + maxCount);
        }
    }
}

実行結果

上記のプログラムを実行すると、以下のような出力が得られます。

The string is: abracadabra
The highest occurring character in the above string is: a
Number of times this character occurs: 5

ここからは、このプログラムがどのように動作しているのか、処理の流れに沿って詳しく解説します。

ステップ1:各文字の出現回数をカウントする

まず、文字列strには「abracadabra」という文字列が格納されています。次に、ASCIIテーブルに含まれるすべての文字(256種類)に対応できるよう、サイズ256のint型配列charCountを作成します。そして、forループを使って文字列strを先頭から順に走査しながら、各文字に対応するcharCountの要素の値を1ずつ加算していきます。これにより、文字列内の各文字が出現した回数が記録されていきます。該当するコード部分は以下の通りです。

String str = "abracadabra";
int []charCount = new int[256];
int length = str.Length;
for (int i = 0; i < length; i++) {
    charCount[str[i]]++;
}

ステップ2:最大出現回数とその文字を特定する

続いて、整数型の変数maxCountに最大の出現回数を、char型の変数characterに最も多く出現した文字をそれぞれ保持させます。再びforループで文字列を走査し、現在のmaxCountよりも大きな出現回数を持つ文字が見つかるたびに、maxCountとcharacterの値を更新していきます。この処理により、ループ終了時には最頻出文字とその出現回数が確定します。該当するコード部分は以下の通りです。

int maxCount = -1;
char character = ' ';
for (int i = 0; i < length; i++) {
    if (maxCount < charCount[str[i]]) {
        maxCount = charCount[str[i]];
        character = str[i];
    }
}

ステップ3:結果をコンソールに表示する

最後に、元の文字列str、最大出現回数maxCount、そして最頻出文字characterの値をConsole.WriteLineメソッドで出力します。該当するコード部分は以下の通りです。

Console.WriteLine("The string is: " + str);
Console.WriteLine("The highest occurring character in the above string is: " + character);
Console.WriteLine("Number of times this character occurs: " + maxCount);

このように、サイズ256の配列を使って出現回数を記録し、その最大値を求めるというシンプルな手法により、文字列内の最頻出文字を効率的に取得することができます。計算量は文字列の長さに比例するO(n)となるため、比較的長い文字列でも高速に動作する点も魅力です。

  1. Pythonの正規表現を使って文字列内で最も多く出現する数字を求める方法

    このチュートリアルでは、正規表現を使って文字列の中で最も多く出現する数字を検出する方法を解説します。Pythonで実際にコードを書きながら、手順を追って確認していきましょう。 以下の手順に従ってプログラムを作成します。 re モジュールと collections モジュールをインポートします。 数字を含む文字列を初期化します。 正規表現ですべての数字を抽出し、リストに格納します。 collections モジュールの Counter を使って、最も多く出現する数字を特定します。 コード例 high_frequency: high_frequency = counter[

  2. Pythonで文字列から文字を削除する方法|スライス・replace・正規表現の使い分け

    Pythonで文字列から特定の文字を削除したい場面はよくあります。目的に応じていくつかの方法があるため、それぞれの特徴と使い方を解説します。 特定のインデックスの文字を削除する(スライス) 文字列の中から指定した位置(インデックス)の1文字だけを削除したい場合は、文字列スライスを使うのが最もシンプルです。削除したい位置の前後をつなぎ合わせることで、その文字だけを取り除いた新しい文字列を作成できます。 >>> s = Hello World >>> s[:4] + s[5:] Hell World この例では、インデックス4にある「o」を除外し、それ以外の部