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

JavaScriptで文字列内の文字がすべて一意かどうかを判定する方法

問題

JavaScriptの関数を作成することを目標とします。この関数は文字列を引数として受け取り、その文字列に含まれるすべての文字が一度だけ出現していれば true を返し、同じ文字が複数回出現していれば false を返します。

コード例

以下が実際のコードです。

const str = 'thisconaluqe';
const allUnique = (str = '') => {
    for(let i = 0; i < str.length; i++){
        const el = str[i];
        if(str.indexOf(el) !== str.lastIndexOf(el)){
            return false;
        };
    };
    return true;
};
console.log(allUnique(str));

実行結果

true

解説

この関数では、for ループを使って文字列内の各文字を先頭から順番に調べています。各文字に対して indexOf()lastIndexOf() を呼び出し、その文字が最初に出現する位置と最後に出現する位置を比較します。

2つの値が一致しない場合、その文字は文字列内に複数回出現していることを意味するため、即座に false を返します。ループを最後まで回しても重複が見つからなければ、すべての文字が一意であると判断し true を返します。

より簡潔な代替手法:Set を使う方法

ES6で導入された Set オブジェクトを利用すると、同じ処理を1行で表現できます。Set は重複する値を持たないため、元の文字列の長さと Set に格納された要素数を比較するだけで判定できます。

const allUnique = (str = '') => new Set(str).size === str.length;
console.log(allUnique('thisconaluqe')); // true
console.log(allUnique('hello')); // false

どちらの方法でも正しく動作しますが、Set を使った方法はコードが短く読みやすいため、実務ではこちらが好まれることが多いです。

  1. C#で文字列がすべて一意の文字で構成されているかを判定する方法

    文字列に含まれるすべての文字が一意(重複なし)であるかどうかを判定するには、各文字をそれ以降の文字と順番に比較していくのが基本的なアプローチです。判定の考え方まず、文字列内のある位置 i の文字と、その次以降の文字 j を比較します。for (int j = i + 1; j < val.Length; j++) {    if (val[i] == val[j])}一致が見つかった場合比較の結果、同じ文字が見つかった場合は、その文字列には重複した文字が含まれていることになります。つまり、すべての文字が一意ではないため、この時点で false を返

  2. 【Python】文字列がすべてユニークな文字で構成されているか判定する方法

    本記事では、与えられた文字列に含まれる文字がすべて一意(ユニーク)であるかどうかを判定するPythonプログラムについて、その解法とアプローチをわかりやすく解説します。 問題の概要 文字列が入力として与えられたとき、その文字列に含まれるすべての文字が重複なく一意であるかどうかを判定します。たとえば「abcde」はすべて異なる文字で構成されているためTrue、「tutorialspoint」のように同じ文字が複数回出現する場合はFalseとなります。 アプローチ この問題は、以下のような手順で効率的に解くことができます。 ブール値の配列を用意する: 各インデックス i が「アルファベット(AS