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

Pythonのインデックスでデコードされた文字列


エンコードされた文字列Sが1つ与えられたとします。デコードされた文字列を見つけてテープに書き込む必要があります。ここでは、エンコードされた文字列が一度に1文字ずつ読み取られ、次の手順が実行されます-

  • 読み取った文字が文字の場合、その文字は単にテープに書き込まれます。
  • 読み取った文字が数字の場合、現在のテープ全体が繰り返し数字に書き込まれます–合計でさらに1回。

ここで、エンコードされた文字列Sがあり、インデックスKが指定されている場合、デコードされた文字列でK番目の文字(1から始まるインデックス)を見つけて返します。

したがって、文字列が「hello2World3」でk =10の場合、出力は「o」になります。これは、デコードされた文字列が「hellohelloWorldhellohelloWorldhellohelloWorld」になるため、10番目の文字が「o」になるためです。

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

  • サイズ:=0
  • for i in string s
    • iが数字の場合、size:=size * iの整数、それ以外の場合、size:=size + 1
  • 範囲の長さがs–1から0までのiの場合
    • k:=kmodサイズ
    • s [i]が数値で、k =0の場合、s [i]
    • を返します。
    • s [i]が数値の場合は、サイズを1減らします。それ以外の場合は、size:=size /s[i]の整数
  • 空の文字列を返す

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

class Solution(object):
   def decodeAtIndex(self, s, k):
      """
      :type S: str
      :type K: int
      :rtype: str
      """
      size = 0
      for i in s:
         if i.isdigit():
            size *= int(i)
         else:
            size += 1
      #print(size)
      for i in range(len(s) - 1, -1, -1):
         k %= size
         if s[i].isalpha() and k == 0:
            return s[i]
         if s[i].isalpha():
            size -=1
         else:
            size /= int(s[i])
      return ""
ob = Solution()
print(ob.decodeAtIndex("hello2World3", 10))

入力

"hello2World3"
10
ob.decodeAtIndex("hello2World3", 10)

出力

o

  1. Pythonでシーケンスインデックスによって反復する方法は?

    Pythonのシーケンスオブジェクトは、順序付けられたアイテムのコレクションです。シーケンス内の各アイテム(リスト、タプル、文字列)には、0から始まるインデックスでアクセスできます。 リスト内の要素をトラバースするには >>> L1=[10,20,30,40,50] >>> for i in range(len(L1)): print (L1[i]) 10 20 30 40 50 文字列から一度に1文字をスライスするには >>> string ='TutorialsPoint' >>> for i in

  2. Pythonで文字列のサイズを取得するにはどうすればよいですか?

    Pythonには、任意の複合オブジェクトの長さを提供するlen()というメソッドがあります。文字列の長さを取得するには、文字列をlen()呼び出しに渡すだけです。 例 print(len('Hello World!')) 出力 12 文字列のサイズをバイト単位で指定する場合は、sysモジュールのgetsizeof()メソッドを使用できます。 例 from sys import getsizeof getsizeof('Hello World!') 出力 33 詳細については、sys.getsizeof()をご覧ください。