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

Pythonで最長の連続する文字と数字の部分文字列を検索する


特定の文字列は、数字と文字が混在している場合があります。この記事では、文字と数字が一緒になっている最大の部分文字列を見つける必要があります。

モジュール付き

正規表現モジュールを使用して、数字または文字を含むすべての連続したサブストリングを検索できます。次に、max関数を適用して、見つかったすべての部分文字列の中で最大の長さを持つ文字と数字の連続した部分文字列のみを選択します。 findall関数は、必要な部分文字列を識別して取得するためにも使用されます。

import re

def longSubstring(str):
   letter = max(re.findall(r'\D+', str), key=len)
   digit = max(re.findall(r'\d+', str), key=len)

   return letter, digit

str = 'Hello 459 Congratulations! 234'
print(longSubstring(str))

出力

上記のコードを実行すると、次の結果が得られます-

(' Congratulations! ', '459')

len()とWhileループを使用

これはまっすぐですが遅いアプローチで、whileループを設計して、指定された文字列にサブストリングとして存在する数字と文字の長さをチェックします。次に、それらの長さを比較し、最大長のサブストリングのみを選択します。

def longSubstring(s):
   max_letterSeq = ''
   max_digitSeq = ''
   i = 0
   while (i < len(s)):

      current_letterSeq = ''
      current_digitSeq = ''

      # Letters
      while (i < len(s) and s[i].isalpha()):
         current_letterSeq += s[i]
         i += 1

      # Digits
      while (i < len(s) and s[i].isdigit()):
         current_digitSeq += s[i]
         i += 1

      # Check if not digit or alphabet
      if (i < len(s) and not (s[i].isdigit())
            and not (s[i].isalpha())):
         i += 1

      if (len(current_letterSeq) > len(max_letterSeq)):
         max_letterSeq = current_letterSeq

      if (len(current_digitSeq) > len(max_digitSeq)):
         max_digitSeq = current_digitSeq

   return max_letterSeq, max_digitSeq

str = 'Hello 459 Congratulations! 234'
print(longSubstring(str))

出力

上記のコードを実行すると、次の結果が得られます-

('Congratulations', '459')

  1. Pythonでバイナリツリーの最長の連続パスの長さを見つけるプログラム

    二分木があるとしましょう。二分木で最長のパスを見つける必要があります。 したがって、入力が次のような場合 連続する最長のシーケンスが[2、3、4、5、6]であるため、出力は5になります。 これを解決するには、次の手順に従います- rootがnullの場合、 0を返す maxPath:=0 関数helper()を定義します。これはノードを取ります inc:=1、dec:=1 ノードの左側がnullでない場合、 [left_inc、left_dec]:=ヘルパー(ノードの左側) それ以外の場合、 [left_inc、left_dec]:=[0、0] ノード

  2. 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]