回文不起作用

时间:2014-02-22 05:35:03

标签: java stack palindrome

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的代码。每件事都运行良好,但回文输出不正确

3 个答案:

答案 0 :(得分:2)

您正在使用FindingPalindrome构建inputString对象,而您应该使用inputString1进行构建:

FindingPalindrome p = new FindingPalindrome(inputString1 );

答案 1 :(得分: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()可以反转字符序列。在这种情况下,您可以使用此代替上述内容:

public static boolean isPalindrome(String s) {
    return new StringBuffer(s).reverse().toString().equals(s);
}

答案 2 :(得分:0)

如果它只是Palindrome检查您关心的话,那么这是一个简洁的实现:

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