指定された文字列が母音回文であるかどうかを確認するPythonプログラム
はじめに
この記事では、「与えられた文字列から子音をすべて取り除いたとき、残った母音だけの文字列が回文になっているかどうかを判定する」という問題を、Pythonプログラムで解く方法を解説します。
問題の概要
問題文:母音と子音の両方を含む文字列が与えられます。まず文字列からすべての子音を取り除き、その結果得られた文字列が回文(前から読んでも後ろから読んでも同じ並びになる文字列)であるかどうかを確認してください。
解決のアプローチ
この問題は、以下の手順で解くことができます。
- 元の文字列を先頭から順に走査し、母音(a・e・i・o・u)だけを取り出して新しい文字列を作成します。
- 母音が1つも含まれていなかった場合は「-1」を出力します。
- 母音のみの文字列と、それを逆順に並べ替えた文字列を比較します。両者が一致すれば「YES」を、一致しなければ「NO」を出力します。
実装例
def get_vowel_string(s):
# 文字列から子音を取り除き、母音のみの文字列を作成する
vowels = ""
for c in s:
if c in "aeiou":
vowels += c
return vowels
def is_palindrome(s):
# 文字列とその逆順が一致するかどうかを判定する
return s == s[::-1]
# ドライバーコード
s = "aeoea"
vowel_str = get_vowel_string(s)
if len(vowel_str) == 0:
print(-1) # 母音が1つも含まれていない場合
elif is_palindrome(vowel_str):
print("YES")
else:
print("NO")
出力
YES
別の例
たとえば s = "tutorialspoint" の場合、子音を取り除くと "uoiaoi" となります。これを逆順にすると "ioaiou" となり、元の文字列とは一致しないため、出力は「NO」になります。
コードの解説
get_vowel_string() 関数は、文字列を1文字ずつ確認し、母音であれば新しい文字列に追加していきます。これにより、元の文字列から子音が完全に除去された、母音のみで構成される文字列が得られます。
is_palindrome() 関数では、スライス構文 s[::-1] を使って文字列を逆順にしたものと、元の文字列を比較しています。両者が一致すれば、その文字列は回文であると判断できます。
ドライバーコードでは、まず母音のみの文字列を取得します。結果が空文字列(母音が1つも含まれていない)の場合は「-1」を表示し、そうでなければ回文判定を行い、結果に応じて「YES」または「NO」を出力します。
まとめ
この記事では、与えられた文字列から子音を取り除き、残った母音だけの文字列が回文かどうかを判定するPythonプログラムについて学びました。文字列の走査とスライスによる反転を組み合わせることで、非常にシンプルに実装できることがわかりました。
-
文字列が空かどうかをチェックするPythonプログラム
この記事では、与えられた文字列が空であるかどうかを判定するための解決策とアプローチについて解説します。 問題文 文字列が入力として与えられたとき、その文字列が空(空文字列)であるかどうかを判定する必要があります。 Pythonの文字列はイミュータブル(変更不可)な性質を持っているため、文字列に対して何らかの操作を行う際には注意して扱う必要があります。 ここでは、上記の問題を解決するための2つのアプローチを紹介します。 len()メソッドを使用する方法 等価演算子(==)を使用する方法 アプローチ1:len()メソッドを使う方法 len()関数で文字列の長さを取得し、その長さが0であれば空文
-
Pythonで文字列がパングラムかどうかを判定するプログラムの作成方法
本記事では、与えられた文字列がパングラムであるかどうかを判定するPythonプログラムの解法とアプローチについて詳しく解説します。 問題の概要 文字列入力が与えられたとき、その文字列がパングラムであるかどうかを判定するPythonプログラムを作成します。 パングラムとは? パングラムとは、英語のアルファベット26文字すべてを少なくとも1回ずつ含む文章や一連の単語のことです。有名な例として「The quick brown fox jumps over the lazy dog」があります。 解法のアプローチ この問題は、以下の手順で解くことができます。 アルファベット全体を表す基準となる文字列