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

Pythonで文字列内の連続した重複文字を削除する方法

ここでは、「R」と「L」のみで構成された文字列 s を扱います。目標は、連続する「R」および連続する「L」が一切存在しない状態にするために、削除する文字数を最小限に抑えることです。

たとえば、入力が "LLLRLRR" の場合、出力は LRLR となります。

解決の手順

この問題を解決するには、以下の手順に従います。

  • 変数 seen に文字列の最初の文字を代入します。
  • 変数 ans にも文字列の最初の文字を代入します。
  • インデックス1以降の各文字 i について以下を繰り返します。
    • iseen と異なる場合:
      • ansi を追加します。
      • seeni で更新します。
  • 最後に ans を返します。

つまり、直前の文字と同じ文字はスキップし、異なる文字だけを結果に追加していくことで、隣接する重複をすべて取り除くことができます。

実装例

理解を深めるために、以下のPythonコードを見てみましょう。

class Solution:
    def solve(self, s):
        seen = s[0]
        ans = s[0]
        for i in s[1:]:
            if i != seen:
                ans += i
                seen = i
        return ans
ob = Solution()
print(ob.solve("LLLRLRR"))

入力

"LLLRLRR"

出力

LRLR

処理のポイント

このアルゴリズムは、文字列を一度だけ走査すればよいため、時間計算量は O(n)、追加で必要となるメモリも結果文字列分のみで O(n) です。前の文字を記憶しておき、同じ文字が続く間は無視するというシンプルな発想で、「RLRL...」のような交互パターンを効率的に生成できます。同様の考え方は、一般的な重複圧縮やデータクレンジングの処理にも応用できます。

  1. Pythonでリストから重複要素を削除する方法を徹底解説

    重複した要素を含むリストが与えられたとき、重複を取り除いた新しいリストを作成するのが本記事のテーマです。初心者の方にも理解しやすいよう、基本的なアルゴリズムの手順から実際のコードまで順を追って解説していきます。 実行例 入力::[2,3,4,3,4,6,78,90] 出力::[2,3,4,6,78,90] アルゴリズム 重複要素を削除するための基本的な手順は以下の通りです。 元となるリストを作成する。 空の新しいリストを用意する。 元のリストの各要素を先頭から順番に走査する。 その要素が新しいリストにまだ存在しないかどうかを判定する。 存在しない場合のみ、新しいリストへ要素を追加する。

  2. 【Python】文字列から重複する単語をすべて削除する方法

    Pythonで文字列に含まれる重複した単語をすべて削除するには、まず文字列をスペースで区切って各単語をリストに格納します。そのうえで、いくつかの方法で重複を取り除くことができます。 ここでは、すべての単語を小文字に変換してからソートし、重複を除外して一意な単語のみを抽出する方法を紹介します。 ソートとループを使った方法 次のコードでは、split()メソッドで文字列を単語ごとに分割し、lower()で小文字に統一したあと、リストを走査して重複しない単語だけを新しいリストに追加しています。 sent = Hi my name is John Doe John Doe is my name #