スタックデータ構造を使って文字列が回文かどうかを判定するPythonプログラム
スタックデータ構造を利用して文字列が回文(パリンドローム)かどうかを判定するには、まずスタッククラスを作成し、値の追加と削除を行うための「push」と「pop」メソッドを定義します。さらに、スタックが空かどうかを確認するメソッドも用意します。
以下にその実装例を示します。
サンプルコード
class Stack_structure:
def __init__(self):
self.items = []
def check_empty(self):
return self.items == []
def push_val(self, data):
self.items.append(data)
def pop_val(self):
return self.items.pop()
my_instance = Stack_structure()
text_input = input('文字列を入力してください... ')
for character in text_input:
my_instance.push_val(character)
reversed_text = ''
while not my_instance.check_empty():
reversed_text = reversed_text + my_instance.pop_val()
if text_input == reversed_text:
print("この文字列は回文です")
else:
print("この文字列は回文ではありません")実行結果
文字列を入力してください... MalayalaM この文字列は回文です
コードの解説
「Stack_structure」という名前のクラスを定義し、その中に「__init__」メソッドを実装します。
「__init__」メソッドは、空のリストを初期化します。このリストがスタック本体となります。
「check_empty」メソッドは、スタックが空かどうかを判定し、真偽値を返します。
「push_val」メソッドは、引数で受け取ったデータをスタックの末尾に追加します。
「pop_val」メソッドは、スタックから末尾の要素を取り出して削除します。
定義したクラスのインスタンス「my_instance」を生成します。
input関数を使って、ユーザーから文字列を受け取ります。
入力された文字列を1文字ずつ反復処理し、それぞれの文字をpush_valメソッドでスタックに積んでいきます。
次に、空の文字列「reversed_text」を用意し、スタックが空になるまでpop_valメソッドで要素を取り出しながら連結することで、元の文字列を逆順に並べ替えます。
スタックは後入れ先出し(LIFO)の構造なので、pushした順序と逆の順序で文字が取り出され、結果として文字列が反転されます。
反転した文字列とユーザーが入力した元の文字列を比較します。
両者が一致すれば回文であると判定できます。
一致しなければ、回文ではないということになります。
判定結果がコンソールに出力されます。
なお、大文字と小文字は区別されるため、「MalayalaM」のように最初と最後の文字が同じケース(M...mではなくM...M)であれば回文として判定されます。小文字・大文字を区別せずに判定したい場合は、比較前にlower()メソッドなどで文字列を正規化するとよいでしょう。
-
指定された文字列が母音回文であるかどうかを確認するPythonプログラム
はじめに この記事では、「与えられた文字列から子音をすべて取り除いたとき、残った母音だけの文字列が回文になっているかどうかを判定する」という問題を、Pythonプログラムで解く方法を解説します。 問題の概要 問題文:母音と子音の両方を含む文字列が与えられます。まず文字列からすべての子音を取り除き、その結果得られた文字列が回文(前から読んでも後ろから読んでも同じ並びになる文字列)であるかどうかを確認してください。 解決のアプローチ この問題は、以下の手順で解くことができます。 元の文字列を先頭から順に走査し、母音(a・e・i・o・u)だけを取り出して新しい文字列を作成します。 母音が1つも
-
Pythonで文字列が回文かどうかを判定する方法
Pythonで回文判定を行う方法文字列が回文(前から読んでも後ろから読んでも同じになる文字列)であるかどうかを確認するには、Pythonの標準ライブラリに含まれる reversed() 関数を利用するのが便利です。この関数は逆順のイテレータオブジェクトを返し、それを list() でリストに変換することができます。手順1:reversed()で文字列を逆順にするまず、対象となる文字列を reversed() 関数に渡し、結果をリストとして取得します。>>> str1=malayalam >>> l1=list(reversed(str1)) >>