プール→ペアリング削除


除去


問題の説明


ペアリングを削除するには、アルファベット小文字の文字列で開始します.まず、文字列内で同じ文字を2つ持つペアを検索します.次に、この2つの文字列を削除し、前後に文字列を接続します.この手順を繰り返してすべての文字列を削除すると、ペアリングの削除が終了します.文字列Sが指定されている場合は、ペアリングを正常に削除できるかどうかを返す戻り関数を完了します.成功した場合は1を返し、そうでない場合は0を返します.
例えば、文字列S=Baabaa
b aa baa → bb aa → aa →
すべての文字列を中の順序で削除できるため、1を返します.
##制限
文字列の長さ:100,000未満の自然数
すべての文字列は小文字で構成されています.

に答える


典型的なスタック問題
積み重ねる方向に取れば簡単に解決できるようです.
  • スタックの準備
  • 先の項目と比較
  • 一致すると、スタックの中でpop
  • 一致しなければスタックをプッシュ
  • スタックに要素がある場合は0、または1を返します
  • stack.length ? 0:1
  • // 효율성 테스트 시간 초과 발생
    function solution(s) {
      const stack = []
    
      for (const i in s) {
        if (s[i] === stack[stack.length - 1]) stack.pop()
        else stack.push(s[i])
      }
    
      return stack.length ? 0 : 1
    }
    for inを使用すると、効率テストに失敗します.
    // 통과
    function solution(s) {
      const stack = []
    
      for (let i = 0; i < s.length; i++) {
        if (s[i] === stack[stack.length - 1]) stack.pop()
        else stack.push(s[i])
      }
    
      return stack.length ? 0 : 1
    }
    全く同じ論理を使うfor効率テストに合格.
    どうしてこんなことになったの?🤔

    forとfor-in,foreach

  • 性能が必要な場合は本機forを使用
  • foreachorfor-in反復器を使っているので若干の出費
  • 逆にforメモリ領域への直接アクセスのため性能損失なし