2014-02-22 117 views
0
import java.util.*; 

public class FindingPalindrome { 

    private String inputString; 
    private Stack<Character> stack = new Stack<Character>(); 

    public FindingPalindrome(String str) 
    { 
     inputString = str; 
     fillStack(); 
    } 

    public void fillStack() 
    { 
     for(int i = 0; i < inputString.length(); i++) 
     { 
      stack.push(inputString.charAt(i)); 
     } 
    } 

    public String reverseString() 
    { 
     String result = new String(); 
     while(!stack.isEmpty()) 
     { 
      result = result.concat(Character.toString(stack.pop())); 
     } 

     return result; 
    } 

    public boolean isPalindrome() 
    { 
     if(inputString.equalsIgnoreCase(reverseString())) 
       return true; 

       else return false; 
    } 
} 




public class TestPalindrome { 

    public static void main(String args[]) 
    { 

     String inputString ="Straw? No, too stupid a fad. I put soot on warts"; 

     String inputString1 = inputString.toLowerCase().replaceAll("[^a-z]",""); 
     FindingPalindrome p = new FindingPalindrome(inputString); 

     if(p.isPalindrome())System.out.println("Is palindrome!"); 
     else System.out.println("Is not palindrome!"); 
    } 

} 

以上是Stack測試Palindrome的代碼。每件事情都運行良好,但迴文輸出不正確Palindrome is not wokring

+0

我認爲它計數空間字符 – Shah

回答

0

您沒有清楚您的問題。你需要需要這樣做使用堆棧?這是令人難以置信的,否則簡單的(我不知道如何解讀目前的算法):

public static boolean isPalindrome(String s) { 

    StringBuffer reverseString = new StringBuffer(); 

    // reverse the string 
    for (int i = s.length() - 1; i > -1; i--) { 
     reverseString.append(s.charAt(i)); 
    } 
    return reverseString.toString().equals(s); 
} 

你的進口將爲:

import java.lang.StringBuffer; 

我知道這個答案不會幫助你,如果你的目的是以維持你目前的算法,但我想我應該提供這樣的東西反正。


一些額外的注意:StringBuffer類有.reverse()可逆轉的字符序列。在這種情況下,你可以使用它來代替上面:

+0

是,使用堆棧。它現在正在工作謝謝 – Shah

+0

@mike:您不需要導入java.lang.StringBuffer,因爲它在自動導入的lang包中。 –

+0

@AwfullyAwesome:這是對的,但我覺得無論如何都應該包含import語句。在這種情況下沒有區別。 –

0

如果你關心那麼這裏只是迴文檢查是一個整潔的實現:

public class Palindrome { 
public static void main(String[] args) { 
    String input = "Some String"; 
    String reverse = new StringBuilder(input).reverse().toString(); 

    if (reverse.equals(input)) 
     System.out.println("String is strictly Palindrome."); 

    else if (reverse.equalsIgnoreCase(input)) 
     System.out.println("String is Palindrome."); 

    else 
     System.out.println("String is not Palindrome."); 
} 
} 
+0

我感謝你的代碼,但由於某種原因,我的教授想要使用Stack – Shah

2

你構建FindingPalindrome物體inputString,而你應該inputString1做到這一點:

FindingPalindrome p = new FindingPalindrome(inputString1);