Python
 Computer >> コンピューター >  >> プログラミング >> Python

スタックデータ構造を使って文字列が回文かどうかを判定する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()メソッドなどで文字列を正規化するとよいでしょう。

  1. 指定された文字列が母音回文であるかどうかを確認するPythonプログラム

    はじめに この記事では、「与えられた文字列から子音をすべて取り除いたとき、残った母音だけの文字列が回文になっているかどうかを判定する」という問題を、Pythonプログラムで解く方法を解説します。 問題の概要 問題文:母音と子音の両方を含む文字列が与えられます。まず文字列からすべての子音を取り除き、その結果得られた文字列が回文(前から読んでも後ろから読んでも同じ並びになる文字列)であるかどうかを確認してください。 解決のアプローチ この問題は、以下の手順で解くことができます。 元の文字列を先頭から順に走査し、母音(a・e・i・o・u)だけを取り出して新しい文字列を作成します。 母音が1つも

  2. Pythonで文字列が回文かどうかを判定する方法

    Pythonで回文判定を行う方法文字列が回文(前から読んでも後ろから読んでも同じになる文字列)であるかどうかを確認するには、Pythonの標準ライブラリに含まれる reversed() 関数を利用するのが便利です。この関数は逆順のイテレータオブジェクトを返し、それを list() でリストに変換することができます。手順1:reversed()で文字列を逆順にするまず、対象となる文字列を reversed() 関数に渡し、結果をリストとして取得します。>>> str1=malayalam >>> l1=list(reversed(str1)) >>