Pythonで文を切り詰めて最初のk個の単語を抽出するプログラムの書き方
問題の概要
単一のスペースで区切られた英語の単語を含む文 s があるとします(先頭や末尾に余分なスペースはないものとします)。さらに、整数値 k も与えられます。このとき、文を切り詰めて、最初の k 個の単語のみを取得する必要があります。
例
例えば、入力が以下のような場合を考えてみましょう。
- s = "Coding challenges are really helpful for students"
- k = 5
この場合、出力は次のようになります。
Coding challenges are really helpful
解決アプローチ
この問題は、以下の手順で解決できます。
split()メソッドを使って、文 s をスペースで分割し、単語のリストを作成します。- スライス構文
words[:k]で、リストの最初の k 個の単語を取り出します。 join()メソッドで、取り出した単語をスペース区切りの文字列として連結して返します。
実装例
理解を深めるために、実際のPythonコードを見てみましょう。
def solve(s, k):
words = s.split()
return " ".join(words[:k])
s = "Coding challenges are really helpful for students"
k = 5
print(solve(s, k))
入力
"Coding challenges are really helpful for students", 5
出力
Coding challenges are really helpful
コードの解説
s.split() は引数なしで呼び出すと、連続する空白文字を基準に文字列を分割し、単語のリストを返します。そのため、仮に先頭や末尾に空白が含まれていても、空の要素が生じることなく正しく処理できます。
words[:k] はリストのスライス操作で、インデックス0からk-1までの要素、つまり最初のk個の単語を取得します。最後に " ".join(...) を使うことで、各単語を半角スペースで連結した文字列を生成して返しています。
このアルゴリズムの計算量は、文の長さを n とすると、時間計算量・空間計算量ともに O(n) となり、非常に効率的です。文章の要約表示やプレビュー機能など、テキストの先頭部分だけを取り出したい場面で幅広く活用できるテクニックです。
-
Pythonでk日後の監獄の独房の状態を求める方法【サイクル検出で高速化】
監獄には8つの独房が一列に並んでおり、それぞれの状態はリスト内の0と1で表されます。1は入居中(占有)、0は空室を意味します。毎日、次のルールに従って独房の状態が更新されます。ある独房の両隣の状態が同じ(両方とも占有、または両方とも空室)であれば、その独房は翌日占有になります。それ以外の場合は空室になります。両端の独房には隣接する独房が1つしかないため、常に空室になります。この記事では、k日後の独房の状態を効率的に求めるPythonプログラムを解説します。問題の例たとえば、初期状態が nums = [1, 0, 1, 0, 0, 0, 0, 0] で k = 1 の場合、出力は [0, 1,
-
Pythonで最大k回の増加操作後に最も頻出する数を求めるプログラム
問題の概要 数値のリスト nums と整数 k が与えられます。「リスト内の任意の要素を1つ選び、その値を1だけ増やす」という操作を最大 k 回まで行えるとき、操作後に最も多く出現することになる数の値を求めてください。候補が複数ある場合は、そのうち最も小さい値を返します。 たとえば nums = [1, 0, 0, 0, 8, 8, 8, 8]、k = 8 の入力を考えてみます。値 1 を7回増やして 8 にすれば、残りの1回で 0 のいずれかを 1 にできます。結果は [8, 1, 0, 0, 8, 8, 8, 8] となり、8 が5個並ぶため、答えは 8 になります。 アプローチ:スライデ