C#で文字列がすべて一意の文字で構成されているかを判定する方法
文字列に含まれるすべての文字が一意(重複なし)であるかどうかを判定するには、各文字をそれ以降の文字と順番に比較していくのが基本的なアプローチです。
判定の考え方
まず、文字列内のある位置 i の文字と、その次以降の文字 j を比較します。
for (int j = i + 1; j < val.Length; j++) {
if (val[i] == val[j])
}一致が見つかった場合
比較の結果、同じ文字が見つかった場合は、その文字列には重複した文字が含まれていることになります。つまり、すべての文字が一意ではないため、この時点で false を返して処理を終了します。
for (int j = i + 1; j < val.Length; j++) {
if (val[i] == val[j])
return false;
}一致が見つからなかった場合
すべての文字同士の比較を行っても一致が一度も見つからなければ、その文字列はすべて一意の文字で構成されていることが確定します。ループを抜けた後に true を返します。
サンプルコード全体
using System;
class Program {
static void Main() {
string val = "abcde";
bool result = CheckUnique(val);
Console.WriteLine(result); // True
}
static bool CheckUnique(string val) {
for (int i = 0; i < val.Length; i++) {
for (int j = i + 1; j < val.Length; j++) {
if (val[i] == val[j])
return false;
}
}
return true;
}
}
このアルゴリズムは二重ループを使用するため、計算量は O(n²) となります。文字数が少ない場合には十分実用的ですが、より大きな文字列を扱う場合は HashSet<char> を使った O(n) の手法も検討すると良いでしょう。
-
Javaの正規表現を使って文字列のすべての文字を1文字ずつ出力する方法
正規表現におけるメタ文字「.」は、改行以外のあらゆる1文字に一致します。この性質を利用すると、入力された文字列に含まれるすべての文字を1文字ずつ取り出して出力することができます。実装の手順Patternクラスのcompile()メソッドを使って、正規表現をコンパイルします。matcher()メソッドを使って、対象の文字列に対するMatcherオブジェクトを生成します。find()メソッドで一致箇所を順番に検索し、一致が見つかるたびにgroup()メソッドでマッチした内容(=1文字)を取得して出力します。サンプルコードimport java.util.Scanner; import java.u
-
Javaで文字列に特定の文字が含まれているか確認する方法
Javaでは、文字列の中に指定した文字が含まれているかどうかを、いくつかの方法で簡単に確認できます。本記事では、代表的な2つの方法である indexOf() メソッドと toCharArray() メソッドを使った文字検索の手法を、サンプルコード付きでわかりやすく解説します。 indexOf() メソッドを使う方法 Stringクラスの indexOf() メソッドを使うと、文字列の中から特定の文字を検索できます。このメソッドは、引数として渡した文字が文字列内で最初に出現する位置(インデックス)を int 型で返します。もし指定した文字が文字列中に存在しない場合は、-1 を返します。 したがっ