伙计们,
我最近接受了采访,并收到了一个关于回文的问题。
给定一个字符串(可能代表一个日期),检查它是否是回文或不使用 Stack。
我试图想出解决办法,但他不喜欢那样。
任何人都可以向我展示它在 Java 中的代码片段吗?
谢谢
PS:这不是作业,是实际面试问题。
伙计们,
我最近接受了采访,并收到了一个关于回文的问题。
给定一个字符串(可能代表一个日期),检查它是否是回文或不使用 Stack。
我试图想出解决办法,但他不喜欢那样。
任何人都可以向我展示它在 Java 中的代码片段吗?
谢谢
PS:这不是作业,是实际面试问题。
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.");
}
}
使用堆栈执行此操作的一般想法非常简单。我没有时间学习语法和 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。将此与“测试”进行比较,它不是回文。