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

Pythonで連続して増加する最長の部分文字列の長さを見つけるプログラム


小文字の文字列sがあるとします。これには、英語の文字と「?」が含まれますシンボル。 「?」ごとに削除するか、小文字に置き換える必要があります。文字「a」で始まる、連続して増加する最長の部分文字列の長さを見つける必要があります。

したがって、入力がs ="vta ??? defke"の場合、出力は6になります。これは、sを "vtabcdefke"に変換でき、 "abcdef"は、連続して増加する最長の部分文字列であり、これも次のように始まります。 「a」。

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

  • maxlen:=0
  • 長さ:=0
  • qmarks:=0
  • sの各cについて、
    • cが「?」と同じ場合、
      • qmarks:=qmarks + 1
    • それ以外の場合、
      • idx:=(cのASCII)-( "a"のASCII)
      • length:=idx + 1 if length <=idx <=length+qmarksまたはidx<=qmarks else 0
      • qmarks:=0
    • maxlen:=maxlenの最大値と(長さの最小値+ qmarksと26)
  • maxlenを返す

理解を深めるために、次の実装を見てみましょう-

def solve(s):
   maxlen = length = qmarks = 0
   for c in s:
      if c == "?":
         qmarks += 1
      else:
         idx = ord(c) - ord("a")
         length = idx + 1 if length <= idx <= length + qmarks or idx <= qmarks else 0
         qmarks = 0
      maxlen = max(maxlen, min(length + qmarks, 26))
   return maxlen

s = "vta???defke"
print(solve(s))

入力

"vta???defke"

出力

6

  1. Pythonで最長の個別のサブリストの長さを見つけるプログラム

    numsという番号のリストがあり、そのすべての要素が一意である最も長い連続したサブリストの長さを見つける必要があるとします。 したがって、入力がnums =[6、2、4、6、3、4、5、2]のような場合、一意の要素の最長リストは[6、3、4、5]であるため、出力は5になります。 、2]。 これを解決するには、次の手順に従います- head:=0、dct:=新しいマップ max_dist:=0 各インデックスiとnumsの要素numについて、実行します =headの場合、 ヘッド:=dct [num] + 1 dct [num]:=i ma

  2. Pythonで最長の連続シーケンスの長さを見つけるプログラム

    並べ替えられていない数値の配列があるとすると、連続する要素の最長シーケンスの長さを見つける必要があります。 したがって、入力がnums =[70、7、50、4、6、5]の場合、連続する要素の最長シーケンスは[4、5、6、7]であるため、出力は4になります。したがって、その長さを返します:4。 これを解決するには、次の手順に従います- nums:=numsのすべての一意の要素 max_cnt:=0 numsのnumごとに、実行します num-1がnumsにない場合、 cnt:=0 numがnumsに存在する間、実行します num:=num + 1