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

Pythonで文字列を行数kのジグザグ文字列に変換するプログラム


文字列sと別の値kがあるとします。各文字をsから取得し、左上から右下に向かってk番目の行に到達するまで斜めに開始し、次に右上に移動して、新しい文字列を見つける必要があります。

したがって、入力がs ="ilovepythonprogramming" k =5のような場合、出力は

になります。

Pythonで文字列を行数kのジグザグ文字列に変換するプログラム

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

  • line:=新しい地図
  • cnt:=0
  • デルタ:=1
  • sの各インデックスiと文字cについて、
    • 行末に(c、i)を挿入[cnt]
    • cnt:=cnt + delta
    • cntがkと同じ場合、
      • デルタ:=-1
      • cnt:=k-2
    • cntが0と同じ場合、
      • デルタ:=1
  • ans:=新しいリスト
  • 行にあるキーiと値cごとに、
    • prefix:=sと同じサイズのリストで、単一の空白スペースで埋めます
    • cの各ペア(x、y)について、
      • prefix [y]:=x
    • プレフィックスに存在する各要素を結合し、それをansに挿入します
  • ansの連続する各要素の間に改行を追加して、新しい文字列を返します

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

from collections import defaultdict
class Solution:
   def solve(self, s, k):
      line = defaultdict(list)
      cnt = 0
      delta = 1
      for i, c in enumerate(s):
         line[cnt].append((c, i))
         cnt += delta
         if cnt == k:
            delta = -1
            cnt = k - 2
         if cnt == 0:
            delta = 1

      ans = []

      for i, c in line.items():
         prefix = [" "] * (len(s))
         for x, y in c:
            prefix[y] = x
         ans.append("".join(prefix))

      return "\n".join(ans)

ob = Solution()
s = "ilovepythonprogramming"
k = 5
print(ob.solve(s, k))

入力

"ilovepythonprogramming", 5

出力

Pythonで文字列を行数kのジグザグ文字列に変換するプログラム


  1. Pythonプログラムのcasefold()文字列

    このチュートリアルでは、文字列メソッド str.casefold()について説明します。 。引数は取りません。メソッドの戻り値は、ケースレス比較に適した文字列です。 ケースレス比較とは何ですか?たとえば、ドイツ語の小文字ß ssと同等です。 str.casefold() メソッドはßを返します ssとして 。すべての文字を小文字に変換します。 例 # initialising the string string = "TUTORIALSPOINT" # printing the casefold() version of the string print(string

  2. 16進文字列を10進数に変換するPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 − 16進文字列が与えられたので、それを10進数に変換する必要があります。 問題を解決するための2つのアプローチがあります- ブルートフォースアプローチ 組み込みモジュールの使用 ブルートフォース方式 ここでは、明示的な型キャスト関数、つまり整数を利用します。この関数は、2つの引数、つまり16進数と同等の引数とベース(16)を取ります。この関数は、16進文字列を整数型の同等の10進数に変換するために使用されます。これは、さらに文字列形式に型キャストして戻すことができます。 例 #input strin