检查给定的字符串是否是使用堆栈的回文

时间:2013-07-26 02:43:53

标签: java string stack palindrome

民间,

我最近接受了采访,并在Palindrome上提出了一个问题。

  

给定一个字符串(可能代表一个日期),检查它是否为a   回文或不使用Stack。

我试图提出解决方案,但他并不喜欢这样。

有人能用Java向我展示它的代码片段吗?

由于

PS:这不是作业,实际的面试问题。

2 个答案:

答案 0 :(得分: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.");

    }
}

答案 1 :(得分:6)

使用堆栈执行此操作的一般想法非常简单。我没有时间学习语法和Java代码,但这是伪代码的概念。

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

这将从左到右推动t-> e-> s-> t。所以最终的堆栈看起来像这样:

TOP - &gt; | T | S | E | T | &lt; - BOTTOM

现在,由于字符串的最后一个字符位于顶部,因此您只需弹出直到堆栈为空并将其存储在字符串中。这将与原始字符串相反。然后,您可以将此字符串与原始字符串进行比较,如果匹配,则表示您有一个回文。

在这种情况下,你会这样做:

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

所以你会抓住t,然后是s,然后是e,最后是第一个t并且有s = tset。 将其与“测试”进行比较,它不是回文。