2013-07-26 53 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

相關問題