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

Pythonで2つの文字列が0または1編集距離離れているかどうかをチェックするプログラム


2つの文字列SとTがあり、それらが編集距離が1か0かどうかを確認する必要があるとします。編集操作は、文字の削除、文字の追加、または文字を別の文字に置き換えることとして定義できます。

したがって、入力がS ="hello"、T ="hallo"の場合、これら2つの文字列の編集距離は1であるため、出力はTrueになります。

これを解決するには、次の手順に従います-

  • m:=Sのサイズ、n:=Tのサイズ
  • i:=0、j:=0
  • count:=0
  • if | m --n |> 1、次に
    • Falseを返す
  • i
  • S[i]がT[j]と同じでない場合、
    • カウントが1と同じ場合、
      • Falseを返す
    • m
    • j:=j + 1
  • それ以外の場合、m> nの場合、
    • i:=i + 1
  • それ以外の場合、
    • i:=i + 1、j:=j + 1
  • count:=count + 1
  • それ以外の場合、
    • i:=i + 1、j:=j + 1
  • Trueを返す
  • 理解を深めるために、次の実装を見てみましょう-

    class Solution:
       def solve(self, S, T):
          m, n = len(S), len(T)
          i, j = 0, 0
          count = 0
          if abs(m - n) > 1:
             return False
          while i < m and j < n:
             if S[i] != T[j]:
                if count == 1:
                   return False
                if m < n:
                   j += 1
                elif m > n:
                   i += 1
                else:
                   i += 1
                   j += 1
                count += 1
             else:
                i += 1
                j += 1
          return True
    ob = Solution()
    S = "hello"
    T = "hallo"
    print(ob.solve(S, T))

    入力

    "hello", "hallo"

    出力

    True

    1. ポイントをチェックするプログラムがPythonで凸包を形成しているかどうか

      ポリゴンの外側の点が時計回りにあるとします。これらの点が凸包を形成しているかどうかを確認する必要があります。 この図から、3つの連続するポイントごとに内角が180°以下であることが明らかです。したがって、すべての角度が180°以下の場合、ポリゴンは凸包になります。 したがって、入力がpoints =[(3,4)、(4,7)、(7,8)、(11,6)、(12,3)、(10,1)、(5,2 )]の場合、出力はTrueになります。 これを解決するには、次の手順に従います- n:=ポイントのサイズ 0からポイントのサイズまでの範囲のiについては、 1の場合はpoints[i-2]、

    2. Pythonで葉のシーケンスが2つの葉と同じであるかどうかを確認するプログラム

      2つの二分木があるとします。両方の木の左から右への葉の順序が同じであるかどうかを確認する必要があります。 したがって、入力が次のような場合 両方のツリーのシーケンスが[2、6]であるため、出力はTrueになります。 これを解決するには、次の手順に従います。 c:=新しいリスト 関数inorder()を定義します。これが定着し、c cがnullの場合、 c:=新しいリスト rootがnullでない場合、 順序(ルートの左側、c) ルートの左側がnullで、ルートの右側がnullの場合、 cの最後にrootの値を挿入 順序(ルートの権利、c) return c