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测试回文的代码。一切运行正常,但是回文输出是不正确的
发布于 2014-02-22 13:42:09
您正在使用inputString构造FindingPalindrome对象,而您应该使用inputString1来完成
FindingPalindrome p = new FindingPalindrome(inputString1 );发布于 2014-02-22 13:40:50
你没有把你的问题说清楚。你需要使用堆栈来做这件事吗?除此之外,它非常简单(我不知道如何读懂你当前的算法):
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);
}发布于 2014-02-22 13:41:05
如果你关心的仅仅是回文检查,那么这里有一个很好的实现:
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.");
}
}https://stackoverflow.com/questions/21950215
复制相似问题