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

C#で指定された文字列がヘテログラムかどうかを判定する方法

ヘテログラムとは?

ヘテログラム(Heterogram)とは、同じ文字が2回以上現れない文字列のことです。つまり、構成するすべての文字が一意である文字列を指します。

例えば、以下のような単語はヘテログラムです。

Mobile
Cry
Laptop

これらの単語には重複した文字が含まれていません。一方、「banana」や「apple」のように同じ文字が複数回出現する文字列は、ヘテログラムではありません。

判定ロジックの考え方

判定には、アルファベット26文字分の出現フラグを格納する整数型配列を使用します。文字列の長さ分だけループ処理を行い、各文字に対応する配列要素をチェックしていきます。まだ出現していない文字であればフラグを立て、すでに出現済みの文字であればその時点で false を返します。

for (int i = 0; i < len; i++) {
   if (val[str[i] - 'a'] == 0)
      val[str[i] - 'a'] = 1;
   else
      return false;
}

ここで len は入力文字列の長さです。str[i] - 'a' という計算により、各文字を配列のインデックス(0~25)へ変換しています。

C#による完全なサンプルコード

using System;

public class GFG {
   static bool checkHeterogram(string str, int len) {
      int []val = new int[26];

      for (int i = 0; i < len; i++) {
         if (val[str[i] - 'a'] == 0)
         val[str[i] - 'a'] = 1;
         else
         return false;
      }
      return true;
   }
   public static void Main () {
      string str = "mobile";

      // 入力文字列の長さを取得
      int len = str.Length;
      if(checkHeterogram(str, len))
      Console.WriteLine("String is Heterogram!");
      else
      Console.WriteLine("String is not a Heterogram!");
   }
}

実行結果

String is Heterogram!

処理のポイント

  • 時間計算量: 文字列を1度だけ走査するため O(n) で効率的です。
  • 空間計算量: サイズ26の固定長配列のみを使用するため O(1) です。
  • 注意点: この実装は小文字の英字のみを想定しています。大文字や記号・空白が含まれる可能性がある場合は、ToLower() などで事前に正規化してから判定すると安全です。
  1. Pythonで与えられたグラフが2部グラフかどうかを判定するプログラム

    2部グラフとは無向グラフが与えられたとき、そのグラフが2部グラフ(バイパータイトグラフ)であるかどうかを判定する方法を解説します。2部グラフとは、グラフのすべての頂点を2つの集合 A と B に分割でき、グラフ内のすべての辺 {u, v} が必ず一方の端点 u が集合 A、もう一方の端点 v が集合 B に属するようなグラフのことです。つまり、同じ集合内の頂点同士を結ぶ辺(A-A や B-B)が一切存在しないグラフです。例として、次のようなグラフを考えてみましょう。この場合、頂点 [0, 4] を集合 A に、[1, 2, 3] を集合 B に分類できます。すべての辺は A から B、または

  2. 指定された文字列がキーワードであるかどうかを確認するPythonプログラム

    この記事では、指定された文字列がPythonのキーワード(予約語)であるかどうかを判定する方法について解説します。問題の概要与えられた文字列が、Pythonにおけるキーワードであるかどうかを確認する必要があります。キーワードとは、言語によって特別な用途のために予約されている単語であり、変数名や関数名などの識別子として使用することはできません。例えば「if」「for」「while」「def」などはすべてキーワードです。これらの名前を変数に使おうとすると、構文エラーが発生します。解決策:keywordモジュールの活用Pythonには標準ライブラリとしてkeywordモジュールが用意されており、これ