{{1}}
任何人都可以帮助我。我不知道哪里出错了。问题是创建一个堆栈(字符),并显示文本在哪里是回文。用户必须输入输入。
P.S这是我的实验测试之一。
答案 0 :(得分:0)
如果我正确地遵循了代码,问题似乎是OP正在将String
对象(original
或reverseString
)与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++));
}
样本测试数据:
很酷的是回文:假的 妈妈是一个回文:真的 从来没有奇怪甚至是回文:真实的 一个男人,一个计划,一条运河 - 巴拿马!是一个回文:真的