-3

皆さん、

私は最近インタビューを受け、パリンドロームについて質問を受けました。

文字列 (日付を表している可能性があります) が与えられた場合、それが回文であるか、Stack を使用していないかを確認します。

私は解決策を考え出そうとしましたが、彼はそれを気に入りませんでした。

Java でのコード スニペットを誰かに見せてもらえますか?

ありがとう

PS : これは宿題ではなく、実際の面接の質問です。

4

2 に答える 2

13
import java.util.Stack;

public class PalindromeTest {

    public static void main(String[] args) {

        String input = "test";
        Stack<Character> stack = new Stack<Character>();

        for (int i = 0; i < input.length(); i++) {
            stack.push(input.charAt(i));
        }

        String reverseInput = "";

        while (!stack.isEmpty()) {
            reverseInput += stack.pop();
        }

        if (input.equals(reverseInput))
            System.out.println("Yo! that is a palindrome.");
        else
            System.out.println("No! that isn't a palindrome.");

    }
}
于 2013-07-26T03:12:16.673 に答える
6

スタックでこれを行う一般的な考え方は非常に単純です。シンタックスと Java コードを説明する時間はありませんが、これが疑似コードの概念です。

string s = "test"
for i=0 to s.length
stack->push(s[i])

これにより、t->e->s->t が左から右にプッシュされます。したがって、結果のスタックは次のようになります。

トップ -> |t|s|e|t| <- 下

これで、文字列の最後の文字が一番上にあるので、スタックが空になるまでポップして文字列に格納するだけです。これは元の文字列の逆になります。この文字列を元の文字列と比較して、一致する場合は回文になります。

この場合、次のようにします。

while(pop != '')
string s += pop'd character

したがって、t、次に s、次に e、最後に最初の t を取得し、s = tset を取得します。これを「テスト」と比較すると、回文ではありません。

于 2013-07-26T02:54:20.957 に答える