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