Pythonを使用して最長の素敵な部分文字列を見つけるプログラム
文字列sがあるとします。 sの最長の素敵な部分文字列を見つける必要があります。文字列sの場合、sのアルファベットのすべての文字について、大文字と小文字の両方で表示されると便利です。そのような部分文字列が複数ある場合は、最も早い部分文字列を返します。
したがって、入力がs ="ZbybBbz"のような場合、これには小文字と大文字のBが含まれるため、出力は"bBb"になります。
これを解決するには、次の手順に従います-
-
cur_max:=-1
-
res:=空白の文字列
-
0からsのサイズの範囲のiの場合、実行します
-
c:=s [i]
-
アッパー:=新しいセット
-
下:=新しいセット
-
cが小文字の場合、
-
下にcを追加
-
-
cが大文字の場合、
-
cを大文字に追加しますが、小文字に変換する前に
-
-
i + 1からsのサイズまでの範囲のjについては、次のようにします
-
c:=s [j]
-
cが小文字の場合、
-
下にcを追加
-
-
cが大文字の場合、
-
cを大文字に追加しますが、小文字に変換する前に
-
-
上部が下部と同じ場合、
-
j-i> cur_maxの場合、
-
cur_max:=j-i
-
res:=sの部分文字列[インデックスiからj+ 1]
-
-
-
-
-
解像度を返す
理解を深めるために、次の実装を見てみましょう-
例
def solve(s): cur_max= -1 res="" for i in range(len(s)): c = s[i] upper = set() lower = set() if c.islower(): lower.add(c) if c.isupper(): upper.add(c.lower()) for j in range(i+1,len(s)): c = s[j] if c.islower(): lower.add(c) if c.isupper(): upper.add(c.lower()) if upper == lower: if j-i>cur_max: cur_max = j-i res = s[i:j+1] return res s = "ZbybBbz" print(solve(s))
入力
"ZbybBbz"
出力
bBb
-
Pythonで文字数がk以上の最長の部分文字列の長さを見つけるプログラム
各文字がソートされた文字列sがあり、数値kもあるとすると、すべての文字が少なくともk回出現するように、最長の部分文字列の長さを見つける必要があります。 したがって、入力がs =aabccddeeffghij k =2の場合、出力は8になります。これは、ここでの最長の部分文字列が ccddeeffであり、すべての文字が少なくとも2回出現するためです。 これを解決するには、次の手順に従います- 関数rc()を定義します。これには時間がかかります c:=すべての文字とその出現を含むマップ acc:=新しいリスト ans:=0 有効:=真 lstのxごとに、 c [x]
-
Pythonで最長の回文部分文字列
文字列Sがあるとします。Sで最も長い回文部分文字列を見つける必要があります。文字列Sの長さは1000であると想定しています。したがって、文字列が「BABAC」の場合、その場合、最長の回文部分文字列は「BAB」です。 これを解決するために、次の手順に従います 文字列の長さと同じ次数の正方行列を1つ定義し、Falseで埋めます 主対角要素をtrueに設定して、0からorder –1までのすべてのiに対してDP[i、i] =True start:=0 範囲2からS+1の長さのlの場合 0からSの長さの範囲のiの場合– l + 1 end:=i + l l =2の場合、 S [i]