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

Pythonで文字列をアルファベットから整数マッピングに復号化


数字( '0'-'9')と'#'で構成される文字列sがあるとします。次のように、sを1つの英語の小文字にマップする必要があります-

  • 文字(「a」から「i」)は、それぞれ(「1」から「9」)で表されます。

  • 文字(「j」から「z」)は、それぞれ(「10#」から「26#」)で表されます。

マッピング後に形成された文字列を見つける必要があります。一意のマッピングが常に存在するという1つの仮定を採用しています。したがって、入力が「10#11#12」の場合、「jkab」になります。 10#はj、11#はk、1はa、2はbです。

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

  • すべての文字とそれに対応するASCII値を保持する1つのマップを作成します

  • ans:=0、およびmap [‘’]:=‘’、ad i:=文字列の長さ– 1

  • i> 0

    • s [i]が#の場合、

      • temp:=“”

      • j:=i – 2からiの場合、temp:=temp + s [j]

      • ans:=map [temp] + ans

      • iを3減らします

    • それ以外の場合は、ans:=map [s [i]] + ansであり、iを1つ減らします

  • ansを返す

例(Python)

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

class Solution(object):
   def freqAlphabets(self, s):
      m = {}
      x = 'a'
      for i in range(1, 27):
         m[str(i)] = x
         x = chr(ord(x) + 1)
      ans = ""
      m['']=''
      i = len(s) - 1
      while i >= 0:
         if s[i] == "#":
            temp = ""
            for j in range(i - 2, i):
               temp += s[j]
            ans = m[str(temp)] + ans
            i -= 3
         else:
            ans = m[s[i]] + ans
            i -= 1
      return ans
ob1 = Solution()
print(ob1.freqAlphabets("17#123#5621#"))

入力

"17#123#5621#"

出力

qawefu

  1. Pythonのリーフから始まる最小の文字列

    二分木のルートがあり、各ノードに0から25までの値が含まれているとします。これらの値は、文字「a」から「z」を表します。値0は「a」を表し、値1は「b」を表します。 、 等々。このツリーの葉で始まり、ルートで終わる辞書式順序で最小の文字列を検索する必要があります。したがって、ツリーが次のような場合- シーケンスが[0,3,25]であるため、出力は「adz」になります。 これを解決するには、次の手順に従います- 次のようにdfsトラバーサルメソッドを定義します ノードがnullでない場合、 ノード値を文字としてAに挿入します ノードに左右の子がない場合、

  2. Pythonプログラムで文字列からn番目の文字を削除する

    この記事では、以下に示す問題ステートメントの解決策について学習します- 問題の説明 文字列が与えられたので、与えられた文字列からi番目のインデックス付き文字を削除して表示する必要があります。 Pythonのどの文字列でも、インデックス付けは常に0から始まります。文字列「tutorialspoint」があるとすると、そのインデックス付けは次のように行われます- T u t o r i a l s p o i n t 0 1 2 3 4 5 6 7 8 9 10 11 12 13 次に、ステートメントを解決するためのPythonスクリプトgを見てみましょう- 例 def remove(str