JavaScriptでのHackerRankの「Super Reduced String」問題の解決方法


「Super Reduced String」問題は、与えられた文字列から隣接するペアの重複する文字を削除していくというものです。例えば、文字列 "abbac" を考えましょう。最初に隣接する "bb" を削除すると "aac" となります。次に "aa" を削除すると "c" となります。最終的に残る文字列は "c" です。

方法1: ループと文字列操作を使用する方法

  1. 文字列を配列に変換します。
  2. 配列をループして隣接する重複する文字を見つけます。
  3. 重複する文字が見つかった場合は、配列からそれらを削除します。
  4. 配列を再度文字列に変換します。
  5. 上記の手順を重複がなくなるまで繰り返します。

以下は、この方法を使用したJavaScriptのコード例です。

function superReducedString(str) {
  let arr = str.split('');
  for (let i = 0; i < arr.length - 1; i++) {
    if (arr[i] === arr[i + 1]) {
      arr.splice(i, 2);
      i -= 2; // インデックスを2つ戻す
    }
  }
  return arr.join('');
}
let input = "abbac";
let result = superReducedString(input);
console.log(result); // 出力: "c"

方法2: 再帰を使用する方法

  1. 再帰関数を作成します。
  2. 文字列をループして隣接する重複する文字を見つけます。
  3. 重複する文字が見つかった場合は、それらを削除して再帰関数を呼び出します。
  4. 再帰関数の戻り値を結合して最終的な結果を得ます。

以下は、再帰を使用したJavaScriptのコード例です。

function superReducedString(str) {
  let reducedStr = removeDuplicates(str);
  return reducedStr.length === 0 ? "Empty String" : reducedStr;
}
function removeDuplicates(str) {
  let len = str.length;
  for (let i = 0; i < len - 1; i++) {
    if (str[i] === str[i + 1]) {
      str = str.slice(0, i) + str.slice(i + 2);
      return removeDuplicates(str);
    }
  }
  return str;
}
let input = "abbac";
let result = superReducedString(input);
console.log(result); // 出力: "c"