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

Pythonで2つの等しい文字の間の最大の部分文字列を見つけるプログラム


文字列sがあるとすると、2つの文字を除いて、2つの等しい文字または要素の間の最長の部分文字列の長さを見つける必要があります。そのような部分文字列が見つからない場合は、-1を返します。

したがって、入力がs ="level"のような場合、最適なサブストリングは"lev"または"vel"のいずれかであるため、出力は3になります。

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

  • メモ:=新しい地図

  • 0からs-1のサイズのiの場合、実行します

    • s [i]がメモにある場合、

      • メモの最後にiを挿入[s[i]]

    • それ以外の場合

      • memo [s [i]]:=1つの要素のみを含むリストi

  • 最高:=0

  • メモのキーごとに、実行します

    • best:=bestの最大値と(memo[key]の最後の要素-memo[key]の最初の要素)

  • 最高のリターン-1

例(Python)

def solve(s):
   memo = {}
   for i in range(len(s)):
      if s[i] in memo:
         memo[s[i]].append(i)
      else:
         memo[s[i]] = [i]

   best = 0
   for key in memo:
      best = max(best, memo[key][-1] - memo[key][0])
   return best - 1

s = "level"
print(solve(s))

入力

"level"

出力

3

  1. 2つのリストのデカルト積を見つけるPythonプログラム

    データl1とl2の2つのリストがあるとします。これら2つのリストのデカルト積を見つける必要があります。 2つのリストが(a、b)と(c、d)のようなものである場合、デカルト積は{(a、c)、(a、d)、(b、c)、(b、d)}になります。 。これを行うには、itertoolsライブラリを使用し、このライブラリにあるproduct()関数を使用します。この関数の戻り値はイテレータです。出力をlist()コンストラクターに渡してリストに変換する必要があります。 したがって、入力がl1 =[1,5,6] l2 =[1,2,9]の場合、出力は[(1、1)、(1、2)、(1、9)、 (5、1)、(5、

  2. Pythonの二分木で2つのノード間の距離を見つけるプログラム

    二分木が与えられ、二分木の2つのノード間の距離を見つけるように求められたとします。グラフのように2つのノード間のエッジを見つけ、エッジの数またはそれらの間の距離を返します。ツリーのノードは以下のような構造になっています- data : <integer value> right : <pointer to another node of the tree> left : <pointer to another node of the tree> したがって、入力が次のような場合 そして、その間の距離を見つけなければならないノードは2と8です。その場