Pythonで指定されたインデックスに基づいて文字列をシャッフルする方法
文字列 s とインデックスのリスト ind が与えられ、両者は同じ長さであるとします。文字列 s は、位置 i にある文字が最終的な文字列内の ind[i] の位置へ移動するようにシャッフルされます。このとき、シャッフル後の最終的な文字列を求める必要があります。
例えば、入力が s = "ktoalak"、ind = [0,5,1,6,2,4,3] の場合、出力は "kolkata" となります。
解決手順
この問題を解くには、以下の手順に従います。
fin_strをsと同じサイズのリストとして作成し、0で初期化するs内の各インデックスiと各文字vに対して、次の操作を行うfin_str[ind[i]] := vと代入する
fin_str内のすべての文字を連結し、結果として返す
Pythonでの実装例
理解を深めるために、以下の実装例を見てみましょう。
def solve(s, ind):
fin_str = [0] * len(s)
for i, v in enumerate(s):
fin_str[ind[i]] = v
return "".join(fin_str)
s = "ktoalak"
ind = [0,5,1,6,2,4,3]
print(solve(s, ind))入力
"ktoalak", [0,5,1,6,2,4,3]
出力
kolkata
アルゴリズムのポイント
このアプローチでは、元の文字列を一度だけ走査しながら、各文字を対応するインデックス位置に直接配置していきます。そのため、時間計算量は文字列の長さを n とした場合に O(n)、結果を格納するための追加リストが必要となるため空間計算量も O(n) となります。非常にシンプルでありながら効率的な手法です。
-
指定された文字列のすべての順列を出力するPythonプログラム
本記事では、以下の問題に対する解決策について詳しく学んでいきます。 問題文 1つの文字列が与えられたとき、その文字列から作成できるすべての順列(並べ替えの組み合わせ)を表示する必要があります。 それでは、以下の実装例で具体的な解決策を見ていきましょう。 実装例 # リストを文字列に変換 def toString(List): return .join(List) # 順列の生成 def permute(a, l, r): if l == r: print(toString(a)) else: for i in range(l, r +
-
Pythonで文字列がパングラムかどうかを判定するプログラムの作成方法
本記事では、与えられた文字列がパングラムであるかどうかを判定するPythonプログラムの解法とアプローチについて詳しく解説します。 問題の概要 文字列入力が与えられたとき、その文字列がパングラムであるかどうかを判定するPythonプログラムを作成します。 パングラムとは? パングラムとは、英語のアルファベット26文字すべてを少なくとも1回ずつ含む文章や一連の単語のことです。有名な例として「The quick brown fox jumps over the lazy dog」があります。 解法のアプローチ この問題は、以下の手順で解くことができます。 アルファベット全体を表す基準となる文字列