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

文字列に同じ頻度のすべての文字が含まれていて、Pythonで1つのバリエーションが許可されているかどうかを確認します


小文字の文字列sがあるとすると、最大1文字を削除して、sを有効な文字列に変換できるかどうかを確認する必要があります。ここで、有効な文字列とは、str内のすべての一意の文字について、各文字の頻度が同じであるような文字列strを意味します。

したがって、入力がs ="xyyzx"のようである場合、zを削除できるため、出力はTrueになり、文字列はxとyの出現が同じである"xyyx"になります。

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

  • サイズ:=26
  • 発生:=サイズ26の配列。これは各文字の頻度をsに格納しています
  • occr1:=0
  • occr1_cnt:=0
  • 0からサイズ-1の範囲のiの場合、実行
    • occurrence [i]が0でない場合、
      • occr1:=occurrence [i]
      • occr1_cnt:=1
      • ループから抜け出す
  • occr2:=0
  • occr2_cnt:=0
  • i + 1からサイズ-1までの範囲のjの場合、実行
    • occurrence [j]が0でない場合、
      • occurrence [j]がoccr1と同じ場合、
        • occr1_cnt:=occr1_cnt + 1
      • それ以外の場合、
        • occr2_cnt:=1
        • occr:=occurrence [j]
        • ループから抜け出す
  • j + 1からサイズ-1までの範囲のkの場合、実行
    • occurrence [k]が0でない場合、
      • occurrence [k]がoccr1と同じ場合、
        • occr1_cnt:=occr1_cnt + 1
      • occurrence [k]がoccr2と同じ場合、
        • occr2_cnt:=occr2_cnt + 1
      • それ以外の場合、
        • Falseを返す
    • occr1_cnt>1およびoccr2_cnt>1の場合、
      • Falseを返す
  • Trueを返す

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

size = 26
def solve(str):
   occurrence = [0]*size
   for i in range(len(str)): occurrence[ord(str[i])-ord('a')] += 1
      occr1 = 0
      occr1_cnt = 0
      for i in range(size):
         if (occurrence[i] != 0):
            occr1 = occurrence[i]
            occr1_cnt = 1
            break
   occr2 = 0
   occr2_cnt = 0
   for j in range(i+1,size):
      if (occurrence[j] != 0):
         if (occurrence[j] == occr1):
            occr1_cnt += 1
         else:
            occr2_cnt = 1
            occr = occurrence[j]
            break
   for k in range(j+1,size):
      if occurrence[k] != 0:
         if (occurrence[k] == occr1):
            occr1_cnt += 1
      if (occurrence[k] == occr2):
         occr2_cnt += 1
      else:
         return False
      if occr1_cnt > 1 and occr2_cnt > 1:
         return False
   return True
s = "xyyzx"
print(solve(s))

入力

"xyyzx"

出力

True

  1. 文字列にすべての一意の文字が含まれているかどうかを確認するPythonプログラム

    この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 sring入力が与えられた場合、文字列にすべての一意の文字が含まれているかどうかを確認する必要があります。 アプローチ ブール値の配列を作成します。ここで、インデックスiの変数フラグは、アルファベットの文字iが文字列に含まれているかどうかを示します。 この文字に2回目に遭遇したとき、文字列文字は一意ではなくなったため、すぐにfalseを返すことができます。 文字列の長さがアルファベットに表示される一意の文字数の値を超える場合も、falseを返すことができます。 文

  2. Pythonで一般的でない文字と連結された文字列?

    ここでは2つの文字列が与えられています。最初に、最初の文字列からすべての共通要素を削除し、2番目の文字列の一般的でない文字を最初の文字列の一般的でない要素と連結する必要があります。 例 Input >> first string::AABCD Second string:: MNAABP Output >> CDMNP アルゴリズム Uncommonstring(s1,s2) /* s1 and s2 are two string */ Step 1: Convert both string into set st1 and st2. Step 2: use th