2014-02-22 75 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);