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