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()をご覧ください。