首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >回文没有唤醒

回文没有唤醒
EN

Stack Overflow用户
提问于 2014-02-22 13:35:03
回答 3查看 106关注 0票数 0
代码语言:javascript
复制
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测试回文的代码。一切运行正常,但是回文输出是不正确的

EN

回答 3

Stack Overflow用户

发布于 2014-02-22 13:42:09

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

代码语言:javascript
复制
FindingPalindrome p = new FindingPalindrome(inputString1 );
票数 2
EN

Stack Overflow用户

发布于 2014-02-22 13:40:50

你没有把你的问题说清楚。你需要使用堆栈来做这件事吗?除此之外,它非常简单(我不知道如何读懂你当前的算法):

代码语言:javascript
复制
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);
}

您的导入将是:

代码语言:javascript
复制
import java.lang.StringBuffer;

我知道如果你的意图是保持你当前的算法,这个答案不会对你有帮助,但我认为我应该提供类似这样的东西。

一些额外的注意事项:StringBuffer类有.reverse(),它颠倒了字符序列。在这种情况下,您可以使用此代码而不是上面的代码:

代码语言:javascript
复制
public static boolean isPalindrome(String s) {
    return new StringBuffer(s).reverse().toString().equals(s);
}
票数 0
EN

Stack Overflow用户

发布于 2014-02-22 13:41:05

如果你关心的仅仅是回文检查,那么这里有一个很好的实现:

代码语言:javascript
复制
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.");
}
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21950215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档