【问题标题】:Check if given string is a palindrome using stack [closed]使用堆栈检查给定的字符串是否是回文[关闭]
【发布时间】:2013-07-26 04:09:26
【问题描述】:

伙计们,

我最近接受了采访,并收到了一个关于回文的问题。

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

我试图想出解决办法,但他不喜欢这样。

谁能给我看一下 Java 中的 sn-p 代码吗?

谢谢

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

【问题讨论】:

  • 发布无效的解决方案
  • 有没有提到他不喜欢它的原因?
  • 贴出你回答的代码sn-p!

标签: java string stack palindrome


【解决方案1】:
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.");

    }
}

【讨论】:

  • 对于空格和区分大小写的字符串使用input = input.replaceAll("\\s","").toLowerCase();
【解决方案2】:

使用堆栈执行此操作的总体思路非常简单。我没有时间语法和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。 与“测试”相比,它不是回文。

【讨论】:

  • 在这里恢复旧帖子。虽然这是一种可行的方法,但它避免了使用堆栈解决此问题的真正原因(实际上使工作加倍)。在这里,它只是用来反转字符串并检查与原始字符串是否相等,这个问题可以通过几乎所有语言中内置的字符串反转函数来解决。如果这是一个家庭作业问题,您的教授可能希望您了解,如果字符串是回文,则推入字符的前半部分并弹出后半部分,检查字符是否相等,会导致空堆栈。跨度>
  • @JacksonH 这实际上是一种更好的方法。我自己不会想到这一点,但这是一个很好的例子,说明在编程中如何有多种方法来做同样的事情。当然,并非所有方法都与其他方法一样有效。赞一个!
  • @Jackson H 将计算时间加倍不会改变渐近计算时间。在这两种情况下都是线性的
猜你喜欢
  • 2021-12-08
  • 2013-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-19
  • 2021-11-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多