スタックを使って文字列を反転させるJavaプログラムの書き方
この記事では、スタック(Stack)データ構造を利用して文字列を反転させる方法を解説します。文字列とは、1つ以上の文字がダブルクォート(" ")で囲まれたデータ型のことです。一方、スタックはオブジェクトのコレクションを格納するための線形データ構造であり、「後入れ先出し(LIFO:Last-In-First-Out)」という仕組みに基づいて動作します。
この特性を活かすと、文字を順番にスタックへ積み込み(push)、あとから取り出す(pop)だけで、自然と逆順の文字列が得られます。
以下に具体的な例を示します。
入力値の例:
入力文字列: Java Program
期待される出力:
反転後の文字列: margorP avaJ
アルゴリズム
ステップ1 - 開始 ステップ2 - 文字列型の変数 input_string と result、スタック型の変数 stack、char型の変数 reverse を宣言する。 ステップ3 - 値を定義する。 ステップ4 - forループで文字列の各文字を走査し、pushメソッドを使って各文字をスタックに積む。 ステップ5 - popメソッドを使ってスタックから要素を取り出し、result文字列に代入する。 ステップ6 - 結果を表示する。 ステップ7 - 終了
処理のポイント
LIFOの性質上、最初にpushした文字が最後にpopされるため、取り出した順に並べるだけで文字列が反転します。計算量は文字数を n とすると O(n) となり、非常に効率的です。
例1:main関数内にすべての処理を記述する場合
ここでは、すべての操作をmain関数の中にまとめて記述します。
import java.util.*;
public class ReverseString {
public static void main(String[] args) {
System.out.println("必要なパッケージがインポートされました");
String input_string = "Java Program";
System.out.println("定義された文字列: " +input_string);
char[] reverse = new char[input_string.length()];
Stack<Character> stack = new Stack<Character>();
for (int i = 0; i < input_string.length(); i++) {
stack.push(input_string.charAt(i));
}
int i = 0;
while (!stack.isEmpty()) {
reverse[i++] = stack.pop();
}
String result = new String(reverse);
System.out.println("
反転後の文字列: " + result);
}
}出力
必要なパッケージがインポートされました 定義された文字列: Java Program 反転後の文字列: margorP avaJ
例2:関数としてカプセル化する場合(オブジェクト指向)
こちらは、反転処理を独立した関数に切り出し、オブジェクト指向プログラミングの形式で記述した例です。処理を再利用しやすい構造になっています。
import java.util.*;
public class ReverseString {
public static String reverse_string(String input_string) {
char[] reverse = new char[input_string.length()];
Stack<Character> stack = new Stack<Character>();
for (int i = 0; i < input_string.length(); i++) {
stack.push(input_string.charAt(i));
}
int i = 0;
while (!stack.isEmpty()) {
reverse[i++] = stack.pop();
}
return new String(reverse);
}
public static void main(String[] args) {
System.out.println("必要なパッケージがインポートされました");
String input_string = "Java Program";
System.out.println("定義された文字列: " +input_string);
System.out.println("
反転後の文字列: " + reverse_string(input_string));
}
}出力
必要なパッケージがインポートされました 定義された文字列: Java Program 反転後の文字列: margorP avaJ
まとめ
スタックのLIFO特性を利用すれば、ループ処理だけで簡単に文字列を反転できます。例1のようにmain関数に直接書く方法は手軽ですが、例2のように関数化しておくと、他のプログラムからも呼び出せて保守性が向上します。用途に応じて使い分けるとよいでしょう。
-
Pythonで再帰を使って文字列を反転させるプログラムの書き方
再帰(リカージョン)の手法を使って文字列を逆順に並べ替えたい場合は、ユーザー定義の関数を再帰と組み合わせて実装します。再帰とは、大きな問題をより小さな単位に分割してそれぞれの結果を計算し、それらを組み合わせることで最終的な答えを導き出す手法です。文字列の反転においても、この考え方をそのまま応用できます。コード例以下に実際のプログラム例を示します。def reverse_string(my_string): if len(my_string) == 0: r
-
Javaで文字列を逆順にする方法まとめ|最も簡単な方法から再帰・Java 8まで
文字列の反転(リバース)は、Javaの技術面接で最も頻出する質問の一つです。面接官は「複数の異なる方法で文字列を反転するコードを書いてください」「組み込みメソッドを使わずに反転してください」「再帰を使って実装してください」など、さまざまなバリエーションで質問してくることがあります。 この記事では、Javaで文字列を逆順にするための代表的な方法を、実際に動作するサンプルコードとともに紹介します。 Javaで文字列を反転する最も簡単な方法 Javaで文字列を反転する最も簡単な方法は、StringBuilderクラスが提供する組み込みのreverse()メソッドを使うことです。わずか1行で実装でき、