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

復号化された文字列のk番目の文字を検索-Pythonで2を設定


1つのエンコードされた文字列があり、部分文字列の繰り返しが部分文字列とそれに続く部分文字列の数として表されているとします。たとえば、文字列が「pq2rs2」でk =5の場合、出力は「r」になります。これは、復号化された文字列が「pqpqrsrs」であり、5番目の文字が「r」であるためです。暗号化された部分文字列の頻度は1桁を超える可能性があることに注意する必要があります。

したがって、入力がstring="pq4r2ts3"およびk=11のような場合、文字列はpqpqpqpqrrtststs

であるため、出力はiになります。

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

  • エンコードされた:=空白の文字列

  • オカレンス:=0、i:=0

    • temp:=空白の文字列

    • 発生:=0

  • i

    • temp:=temp + str [i]

    • i:=i + 1

  • i

    • オカレンス:=オカレンス* 10 + ASCII of(str [i])-ASCII of( '0')

    • i:=i + 1

  • 範囲1のjから発生+1まで、1ずつ増加します。

    • エンコード:=エンコード+温度

  • オカレンスが0と同じ場合、

    • エンコード:=エンコード+温度

  • エンコードされたものを返す[k-1]

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

def find_kth_char(str, k):
   encoded = ""
   occurrence = 0
   i = 0
   while i < len(str):
      temp = ""
      occurrence = 0
      while (i < len(str) and ord(str[i]) >= ord('a') and ord(str[i]) <= ord('z')):
         temp += str[i]
         i += 1
      while (i < len(str) and ord(str[i]) >= ord('1') and ord(str[i]) <= ord('9')):
         occurrence = occurrence * 10 + ord(str[i]) - ord('0')
         i += 1
      for j in range(1, occurrence + 1, 1):
         encoded += temp
   if occurrence == 0:
      encoded += temp
   return encoded[k - 1]

str = "pq4r2ts3"
k = 11
print(find_kth_char(str, k))

入力

"pq4r2ts3", 11

出力

t

  1. Pythonで文字列内のn番目の部分文字列を見つける方法は?

    最大n+1分割で部分文字列を分割することにより、文字列内でn番目に出現する部分文字列を見つけることができます。結果のリストのサイズがn+1より大きい場合は、サブストリングがn回以上出現することを意味します。そのインデックスは、元の文字列の長さ-最後に分割された部分の長さ-部分文字列の長さという簡単な式で見つけることができます。 例 def findnth(string, substring, n):     parts = string.split(substring, n + 1)     if len(parts) <= n + 1: &nbs

  2. Pythonで文字列内の部分文字列の最後の出現のインデックスを見つける方法は?

    Pythonには、文字列の末尾から部分文字列の出現を検索するrfind()メソッドがあります。見つかった場合は最後に発生したインデックスを返し、それ以外の場合は-1を返します。次のように使用できます: >>> 'some of the some'.rfind('some') 12 >>> 'some of the some'.rfind('none') -1 >>> "NikolaTesla".rfind('kola') 2