Java二进制搜索树实现

时间:2016-05-21 04:10:28

标签: java

{{1}}

任何人都可以帮助我。我不知道哪里出错了。问题是创建一个堆栈(字符),并显示文本在哪里是回文。用户必须输入输入。

P.S这是我的实验测试之一。

1 个答案:

答案 0 :(得分:0)

如果我正确地遵循了代码,问题似乎是OP正在将String对象(originalreverseString)与Stack<Character>对象进行比较。

因此,可能的失败是String对象与Stack对象的错误尝试比较。

我认为if/else if逻辑中存在第二次失败,因为“酷”的示例输入不是回文,但在这种情况下不会产生输出。

编辑:虽然OP代码确实尝试针对输入数据的情况进行调整(在问题中没有给出是否是要求),但它没有考虑空格或其他标点符号。根据{{​​3}},标点符号通常也会被忽略。同样,无论是关注空格,句号,破折号等,这个练习的一部分都没有在问题中定义。根据全部要求,问题略微明确。

我认为使用堆栈的解决方案会使用String,将其按字符推送到Stack(可能会纠正大小写,并在当时删除所有标点符号),然后执行通过从Stack弹出来进行比较。我认为OP代码在使用Stack时缺少部分要求。

Stack上包含字符的示例代码。当然还有其他方法:

// push by character onto the stack; use only
//  characters, and convert to lower case
for (int i = 0; i < str.length(); i++) {
    char c = str.charAt(i);
    if ( (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') ) {
         stk.push(Character.toLowerCase(c));
    }
}

从检查字符串中删除所有非字符的示例:

// convert out comparison String to lower case and remove
// all non letters
String chk = str.toLowerCase().replaceAll("[^a-z]", "");

使用Stack检查字符串的示例循环:

    // assume we have a palindrome
    boolean palindrome = true;
    // counter across the String
    int i = 0;

    // loop while there is more on the stack and we haven't
    // failed our test
    while (! stk.isEmpty() && palindrome) {
        Character c = stk.pop();
        palindrome = (c == chk.charAt(i++));
    }

样本测试数据:

  很酷的是回文:假的   妈妈是一个回文:真的   从来没有奇怪甚至是回文:真实的   一个男人,一个计划,一条运河 - 巴拿马!是一个回文:真的