Pythonで文字列の文字をペアごとに入れ替えるプログラム
文字列 s が与えられたとき、奇数番目の文字と偶数番目の文字をすべて入れ替えることを考えます。最終的には、隣り合う2文字ずつがペアで交換された新しい文字列を得ることができます。
たとえば、入力が s = "programming" の場合、出力は "rpgoarmmnig" となります。
解決の手順
この問題は、以下のステップで解くことができます。
- まず、文字列
sを文字のリストに変換します。 - インデックス
iを 0 からリストの長さ - 1 まで、2 ずつ増やしながらループします。 - 各ループ内で、
s[i]とs[i+1]の値を入れ替えます。 - 最後に、リスト内のすべての文字を連結して文字列に戻し、結果として返します。
このアルゴリズムでは、文字列を直接操作する代わりに一度リストへ変換することで、Pythonのタプルアンパック(a, b = b, a)を使った簡潔なスワップ処理が可能になります。
実装例
それでは、実際のコードを見てみましょう。
def solve(s):
s = list(s)
for i in range(0, len(s)-1, 2):
s[i], s[i+1] = s[i+1], s[i]
return ''.join(s)
s = "programming"
print(solve(s))入力
"programming"
出力
rpgoarmmnig
コードのポイント
list(s):文字列はイミュータブル(変更不可)なため、スワップを行う前にリストへ変換しています。range(0, len(s)-1, 2):開始位置 0 から、2 文字おきにペアを作るための範囲指定です。''.join(s):入れ替え後のリストを再びひとつの文字列に結合します。
この方法なら、時間計算量は O(n)、空間計算量も O(n) で効率的に処理できます。文字列の長さが奇数の場合、最後の1文字はペアを持たないためそのまま残ります。
-
【Python】文字列がすべてユニークな文字で構成されているか判定する方法
本記事では、与えられた文字列に含まれる文字がすべて一意(ユニーク)であるかどうかを判定するPythonプログラムについて、その解法とアプローチをわかりやすく解説します。 問題の概要 文字列が入力として与えられたとき、その文字列に含まれるすべての文字が重複なく一意であるかどうかを判定します。たとえば「abcde」はすべて異なる文字で構成されているためTrue、「tutorialspoint」のように同じ文字が複数回出現する場合はFalseとなります。 アプローチ この問題は、以下のような手順で効率的に解くことができます。 ブール値の配列を用意する: 各インデックス i が「アルファベット(AS
-
Pythonで文字のリストを文字列に変換する方法を解説
Pythonでは、リスト内の個々の要素をひとつの文字列にまとめたい場面がよくあります。たとえば、データを保存したり送信したりする際に必要となるシリアライズ(直列化)の処理では、このような変換が非常に役立ちます。具体的には、次のような変換を指します。[h, e, l, l, o, , w, o, r, l, d] → hello worldjoinメソッドを使った変換Pythonには、このような変換を実現するためのjoin()メソッドが標準で用意されています。joinメソッドは、区切り文字(デリミタ)として使う文字列に対して呼び出し、引数に渡したリストの各要素を連結します。今回は各文字をつなげ