【Python】文字列の母音を先にソートし、その後に子音をソートして連結する方法
小文字のアルファベットのみで構成された文字列 s が与えられたとき、すべての母音をアルファベット順に並べたものの後ろにすべての子音をアルファベット順に並べたものを連結した文字列を作る問題を考えてみましょう。
問題例
入力が "helloworld" の場合、出力は "eoodhlllrw" になります。
これは、母音が e、o、o の3つでソート後も "eoo"、子音をソートすると "dhlllrw" になるためです。
解き方のアプローチ
この問題は、以下の手順で解くことができます。
- 母音を格納するための空文字列
kと、子音を格納するための空文字列tを用意します。 - 文字列
sの各文字cに対して次の処理を行います。cが母音であれば、kに連結します。- それ以外の場合は、
tに連結します。
- ループが終わったら、
kとtをそれぞれソートし、k + tの順に連結して返します。
実装例(Python)
理解を深めるために、実際のコードを見てみましょう。
class Solution:
def solve(self, s):
vowels = 'aeiou'
k = ''
t = ''
for c in s:
if c in vowels:
k = k + c
else:
t = t + c
k = ''.join(sorted(k))
t = ''.join(sorted(t))
return k + t
ob = Solution()
print(ob.solve("helloworld"))
入力
"helloworld"
出力
eoodhlllrw
計算量の目安
この解法では、まず文字列を一度走査して母音と子音を振り分け、その後それぞれをソートしています。文字列の長さを n とすると、時間計算量は O(n log n)、必要な追加メモリは O(n) となります。シンプルで直感的なアプローチであり、小規模な文字列であれば十分に高速に動作します。
-
Pythonで挿入ソート(Insertion Sort)を実装する方法:アルゴリズムとサンプルコードを徹底解説
この記事では、Python 3.x(およびそれ以前のバージョン)における挿入ソートの実装方法について詳しく解説します。挿入ソートは、トランプの手札を整理するイメージに近い、直感的で理解しやすいソートアルゴリズムです。挿入ソートのアルゴリズム挿入ソートは以下の手順で動作します。入力要素を順番に走査し、各反復ごとにソート済みの配列部分を少しずつ拡張していきます。現在注目している要素(キー)を、ソート済み部分の中で最も大きい値と比較します。キーがその値より大きければ、要素は元の位置のまま次の要素へ進みます。そうでなければ、ソート済み配列内の正しい位置を探し出し、そこへ移動させます。具体的には、ソート
-
Pythonで学ぶ挿入ソート(Insertion Sort)の仕組みと実装方法
この記事では、Python 3.xにおける挿入ソート(Insertion Sort)の基本的な考え方と、実際のコードによる実装方法をわかりやすく解説します。 挿入ソートのアルゴリズム 挿入ソートは、配列を「整列済みの部分」と「未整列の部分」に分け、未整列の要素を一つずつ取り出して、整列済み部分の正しい位置に挿入していくシンプルなソート手法です。処理の手順は以下の通りです。 1. 各反復ごとに整列済みの配列を少しずつ拡大しながら、入力要素を走査する。 2. 現在の要素(キー)を、整列済み配列内の最大値と比較する。 3. キーがその最大値より大きければ、要素はそのままの位置に置かれ、 次の要