首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在java中使用堆栈和队列确定回文

在java中使用堆栈和队列确定回文
EN

Stack Overflow用户
提问于 2016-11-07 06:03:34
回答 4查看 8.8K关注 0票数 0

在这里,我试图通过使用堆栈和队列来确定一个单词或短语是否为回文,这取决于我所写的短语。

它所做的是,它说所有的东西都是回文,并根据它有多少个字母来写“回文”。

我猜我需要在最后一个for循环和while循环之间添加一些东西,但我不确定是什么。

代码语言:javascript
复制
public class CheckPalindrome {

public static void main(String[] args) throws IOException {
    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

    while (true) {

        String line = reader.readLine();


        if (line.toLowerCase().equals("quit")) {
            break;
        }

        Stack<Character> stack = new Stack<Character>();

        Queue<Character> queue = new LinkedList<Character>();

         for (int i = 0; i < line.length(); i++) {
                stack.push(line.charAt(i));
            }

         for (int i = line.length() - 1; i >= 0; i--) {
             queue.add(line.charAt(i));
         }

          while (!queue.isEmpty()) {
             if (queue.remove().equals(stack.pop())) {
                 System.out.println("Palindrome");
             } else {
                 System.out.println("Not a Palindrome");
             }
         }

      }     
   }
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-11-07 06:17:16

我对您的代码做了一些非常小的修改(首先修复了一个for循环,然后防止您的“回文/不是回文”消息为输入中的每个字符打印一次),以使其正常工作:

代码语言:javascript
复制
import java.util.Stack;
import java.util.LinkedList;
import java.util.Queue;
import java.io.*;
class Palindrome {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        while (true) {

            String line = reader.readLine();


            if (line.toLowerCase().equals("quit")) {
                break;
            }

            Stack<Character> stack = new Stack<Character>();

            Queue<Character> queue = new LinkedList<Character>();

            for (int i = 0; i < line.length(); i++) {
                stack.push(line.charAt(i));
            }

            for (int i = 0; i < line.length(); i++) {
                queue.add(line.charAt(i));
            }

            boolean isPalindrome=true;
            while (!queue.isEmpty()) {
                if (queue.remove().equals(stack.pop())) {
                    continue;
                } else {
                    isPalindrome=false;
                    break;
                }
            }
            if (!isPalindrome) {
                System.out.println("Not a Palindrome");
            } else {
                System.out.println("Palindrome");
            }

        }     
    }
}
票数 2
EN

Stack Overflow用户

发布于 2016-11-07 06:06:57

您需要按相同的顺序将字符放入每个堆栈和队列中。两者都使用的要点是,一个颠倒了顺序,另一个不颠倒,你自己颠倒其中一个的顺序,就像你现在做的那样,就会否定这一点。

票数 1
EN

Stack Overflow用户

发布于 2016-11-07 06:35:14

如果感兴趣,这里是您使用Deque的方法的一个变体,而不是分别使用堆栈和队列。队列只是一个双端队列(即同时作为两个队列进行操作)。

代码语言:javascript
复制
public static boolean isPalindrome(String word) {
    boolean isPalindrome = word.length() == 1;
    if (!isPalindrome) {
        Deque<Character> wordDeque = new LinkedList<>();
        for (Character c : word.toCharArray()) {
            wordDeque.add(Character.toLowerCase(c));
        }
        isPalindrome = true;
        while (isPalindrome && wordDeque.size() > 1) {
            isPalindrome = wordDeque.pollFirst().compareTo(wordDeque.pollLast()) == 0;
        }
    }
    return isPalindrome;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40455042

复制
相关文章

相似问题

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