【JavaScript】文字列内の文字がすべて一意かどうかを判定する方法
JavaScriptで、引数として文字列を1つ受け取り、その文字列に含まれるすべての文字が一意(重複なし)であれば true を、1文字でも重複があれば false を返す関数を作成してみましょう。
アプローチ:ハッシュセットの活用
この問題はハッシュセット(JavaScriptでは Set オブジェクト)を使うことで効率的に解決できます。基本的な考え方は次のとおりです。
- 文字列を1文字ずつ走査しながら、遭遇した文字をセットに記録していく。
- 走査中に、すでにセットへ登録済みの文字を見つけたら、その時点で
falseを返す。 - 最後まで重複が見つからなければ、すべての文字が一意であるため
trueを返す。
コード例
以下が実際のコードです。
const str = 'abschyie';
const checkUniqueness = (str = '') => {
const hash = new Set();
for(let i = 0; i < str.length; i++){
const el = str[i];
if(hash.has(el)){
return false;
};
hash.add(el);
};
return true;
};
console.log(checkUniqueness(str));出力結果
コンソールには以下のように表示されます。
true
計算量について
このアプローチの時間計算量は O(n)(n は文字列の長さ)、空間計算量も O(n) です。Set への追加・検索は平均 O(1) で行えるため、ネストしたループで全文字同士を比較する方法(O(n²))よりもはるかに効率的です。
補足:サロゲートペアの扱いに注意
上記の実装では、絵文字などのサロゲートペア(2コードユニットで構成される文字)は1文字として正しく扱えません。Unicode のコードポイント単位で判定したい場合は、[...str] のようにスプレッド構文で配列化してからループすると安全です。
-
JavaScriptで文字列を検索する方法【search()メソッドの使い方を解説】
JavaScriptで文字列を検索する方法 JavaScriptで文字列の中から特定の文字列を探すには、search()メソッドを使用します。このメソッドは、引数に渡した文字列(または正規表現)が対象の文字列内で最初に一致した位置(インデックス)を返し、見つからなかった場合は -1 を返します。 以下は、JavaScriptで文字列を検索するサンプルコードです。 サンプルコード <!DOCTYPE html> <html lang="en" > <head> <meta charset="UTF-8" />
-
JavaScriptで行列の対角線がすべて同じ要素かどうかを判定する方法
問題概要 リテラルを要素とする2次元配列 arr を第一引数(唯一の引数)として受け取るJavaScript関数を作成します。 この関数の役割は、行列の左上から右下へ向かうすべての対角線が同じ要素で構成されているかどうかを判定することです。これは、いわゆる「トゥーマトリックス(Toeplitz行列)」と呼ばれる行列の判定問題に相当します。 条件を満たしていれば true を、そうでなければ false を返します。 例として、次の入力を関数に渡した場合を考えてみましょう。 入力 const arr = [ [6, 7, 8, 9], [2, 6, 7, 8], [1,