【问题标题】:Palindrome is Not wokring回文不起作用
【发布时间】:2014-02-22 05:35:03
【问题描述】:
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 的代码。一切正常,但回文输出不正确

【问题讨论】:

  • 我认为它的计数空间是字符

标签: java stack palindrome


【解决方案1】:

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

FindingPalindrome p = new FindingPalindrome(inputString1 );

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 感谢您提供的代码,但出于某种原因,我的教授想使用 Stack
    【解决方案3】:

    你没有把你的问题说清楚。您需要使用堆栈来执行此操作吗?否则它非常简单(我不知道如何阅读您当前的算法):

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

    【讨论】:

    • @mike:您不需要导入 java.lang.StringBuffer,因为它在自动导入的 lang 包中。
    • @AwfullyAwesome:没错,但我觉得无论如何都应该包含 import 语句。在这种情况下没有任何区别。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-13
    • 2013-11-20
    • 2018-04-08
    • 2015-11-09
    相关资源
    最近更新 更多