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

JavaScriptで2つの文字列間のハミング距離を計算する方法

ハミング距離(Hamming Distance)は、情報理論や符号理論において誤り検出・誤り訂正などに広く活用されている基本的な概念です。

ハミング距離とは

同じ長さを持つ2つの文字列間のハミング距離とは、対応する位置にある文字が異なる箇所の総数を指します。

例として、次の2つの文字列を見てみましょう。

const str1 = 'delhi';
const str2 = 'delph';

この2つの文字列のハミング距離は「2」です。4番目と5番目の文字がそれぞれ異なるためです。なお、ハミング距離を計算するには、比較対象となる2つの文字列が必ず同じ長さである必要があります。

そこで今回は、str1とstr2という2つの文字列を受け取り、それらのハミング距離を返すJavaScript関数を実装していきます。

コード例

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

const str1 = 'delhi';
const str2 = 'delph';
const hammingDistance = (str1 = '', str2 = '') => {
   if (str1.length !== str2.length) {
      return 0;
   }
   let dist = 0;
   for (let i = 0; i < str1.length; i += 1) {
      if (str1[i] !== str2[i]) {
         dist += 1;
      };
   };
   return dist;
};
console.log(hammingDistance(str1, str2));

コードの解説

  • まず、2つの文字列の長さが一致しない場合はハミング距離を定義できないため、0を返して処理を終了します。
  • 続いて、カウンタとなる変数distを0で初期化し、forループを使って先頭から順に各位置の文字を比較していきます。
  • 異なる文字が見つかるたびにdistを1ずつ加算し、ループ完了後の値を結果として返します。

出力結果

コンソールには次のように出力されます。

2

このように、シンプルなループ処理だけで文字列間のハミング距離を効率的に求めることができます。

  1. JavaScriptで2つの文字列に共通しない文字を抽出して返す方法

    問題2つの文字列を引数として受け取るJavaScript関数を作成することを考えます。この関数は、両方の文字列に共通して含まれていない文字、つまりどちらか一方の文字列にのみ存在する文字だけを抜き出し、それらをつなげた新しい文字列を返す必要があります。たとえば、xyab と xzca の2つの文字列が与えられた場合、共通する文字は x と a なので、結果として y、b、z、c を連結した ybzc を返すことになります。コード例以下がその実装コードです。const str1 = xyab; const str2 = xzca; const findUncommon = (str1 = , s

  2. Pythonで2つの文字列の編集距離がちょうど1であるかを判定する方法

    2つの文字列 s と t が与えられたとき、両者の編集距離(エディット距離)がちょうど1であるかどうかを判定する問題を考えてみましょう。 ここでいう「編集距離」とは、一方の文字列をもう一方の文字列に変換するために必要な操作の回数のことです。許容される操作は次の3種類です。 1文字を挿入する 1文字を削除する 1文字を置き換える 例えば、s = hello、t = heillo の場合、s に「i」を1文字挿入するだけで t にできるため、出力は True になります。 アルゴリズムの考え方 この問題は、2つのポインタを使って両文字列を先頭から同時に走査することで、O(n) の計算量で効率的