首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用堆栈检查字符串是回文。

使用堆栈检查字符串是回文。
EN

Stack Overflow用户
提问于 2019-05-25 11:52:06
回答 4查看 644关注 0票数 1

我想使用java中的堆栈实现来检查字符串是否回文。我尝试过许多方法,但这并没有给我正确的答案。有人能帮我吗?

我在我的类中实现了一个变量名为"stackArray“的堆栈。

回文法:

代码语言:javascript
运行
复制
Stack s1 = new Stack(5);

for (int i = 0; i < 5; i++) {
    s1.push(stackArray[i]);
}

String [] reverser = new String[5];

while (!s1.isEmpty()) {
    int count = 0;
    reverser[count] = s1.pop();
    count++;
}

if (s1.equals(reverser)){
    System.out.println("The input String is a palindrome.");
}
else
    System.out.println("The input String is not a palindrome.");

司机代码:

代码语言:javascript
运行
复制
public static void main(String[] args) throws Exception { 

        Stack st = new Stack(5);

        st.push("l");
        st.push("e");
        st.push("v");
        st.push("e");
        st.push("l");
        System.out.println("");
        System.out.println("When Palindromic is starting; ");
        System.out.println("");
        st.palindromic();
}

很明显,单词"level“是回文,但它总是说”输入字符串不是回文。“

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-05-25 12:27:40

您的解决方案至少有两个基本问题:

  1. 您将弹出s1,直到它为空,然后执行回文检查。
  2. s1和反转器不是相同的数据类型。

1)暂时忽略项目2,当您使用s1来确定输入是否为回文时,它看起来是空的。您需要确保在进行等效检查时,两个变量都指向包含数据的结构!

2) s1是堆栈,反转器是String[]。Stack中的“equals”的默认实现是检查参数是否是堆栈的实例。因为永远不会出现这种情况,所以您将始终看到“输入字符串不是回文”。

要修复2),需要使两个对象都具有相同的数据类型(无论是堆栈还是String[])。如果选择后一个String[],则需要验证每个索引i处的字符串在s1和反转器中都是等效的。

希望这能有所帮助!

票数 0
EN

Stack Overflow用户

发布于 2019-05-25 13:21:15

检查堆栈类中等于方法的实现,因为实现没有发布,因此很难找到问题。但是,如果您不需要这样做,您可以使用相同的方法进行比较。记住使用相同的数据类型。例如,将数组和堆栈强制转换为字符串。然后使用string类的相等方法。

代码语言:javascript
运行
复制
String original = "level"; //The contents of you stack dumped into a String
String[] reversedArr = {"l", "e", "v", "e", "l"}; //And your array reverser

String reversed = "";

for (String letter : reversedArr)
    reversed = reversed.concat(letter);

System.out.println(original.equals(reversed));
票数 0
EN

Stack Overflow用户

发布于 2019-05-25 17:21:08

我在20年没有使用Java之后,重新学习它。下面是我之前对你的主要帖子的评论的一个实现。我的堆栈是基于OOP的,而不是使用内部数组:

代码语言:javascript
运行
复制
public class Palindrome {

    public static void main(String[] args)
    {
        java.util.Scanner keyboard = new java.util.Scanner(System.in);
        System.out.print("Enter the word to check: ");
        String input = keyboard.nextLine();
        Palindrome p = new Palindrome(input);
        System.out.println("Input: " + p.getInput());
        System.out.println("Reversed: " + p.getInputReversed());
        System.out.println("Palindromic: " + p.isPalindromic());
    }

    private String _input;

    public Palindrome(String input)
    {
        _input = input.toLowerCase();
    }

    public String getInput()
    {
        return _input;
    }

    public String getInputReversed()
    {
        CharStack chars = new CharStack(getInput());    
        String reversed = "";
        while(!chars.empty())
        {
            try {
                reversed = reversed + chars.pop();
            } catch (Exception e) {
                System.out.println("Exception: " + e.getMessage());
            }
        }
        return reversed;
    }

    public boolean isPalindromic()
    {
        return getInput().equals(getInputReversed());
    }

    private class CharStack
    {

        private CharStackNode top = null;

        private class CharStackNode
        {
            public char c;
            public CharStackNode next = null;

            public CharStackNode(char inC, CharStackNode top)
            {
                c = inC;
                next = top;
            }
        }

        public CharStack(String input)
        {
            for(char c: input.toCharArray())
            {
                push(c);
            }
        }

        public void push(char c)
        {
            top = new CharStackNode(c, top);;
        }

        public char pop() throws Exception
        {
            if (!empty())
            {
                char c = top.c;
                top = top.next;
                return c;
            }
            else
            {
                throw new Exception("Cannot pop() an empty stack!");
            }
        }

        public boolean empty()
        {
            return top == null;
        }

    }

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56304575

复制
相关文章

相似问题

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