2013-07-26 24 views
-2

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

我最近接受了采访,并在回文中得到了一个问题。

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

我试图想出解决方案,但他不喜欢那样。

任何人都可以在Java中看到它的代码片段吗?

谢谢

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

+1

发布您的解决方案不起作用 –

+1

他*提到他为什么不喜欢它? – alex

+0

发布您回答的代码片段! – Devrath

回答

5

用堆栈做这件事的一般想法非常简单。我没有时间语法和Java代码,但这是伪代码中的概念。

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

这会从左到右推t-> e-> s-> t。所以得到的堆栈如下所示:

TOP - > | t | s | e | t | < - BOTTOM

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

在这种情况下,你会怎么做:

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

所以,你会抢T,则S,则E终于第t,并具有S = TSET。 比较这个“测试”,它不是回文。

11
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."); 

    } 
} 
+0

对于空格和区分大小写的字符串,使用'input = input.replaceAll(“\\ s”,“”)。toLowerCase();' – Omore

相关问题