回文使用栈

Palindrome using stack

我在 java 中使用堆栈写了一个回文。但是,由于某些原因,在弹出堆栈时程序没有按预期工作。我也尝试过使用 top 并使用此变量进行迭代。无论哪种方式,它都不起作用。

import java.util.Stack;

class Palindromer {

Stack<Character> stack = null;
int top = -1;

public boolean isPalindrome(String s) {
    for (int i = 0; i < s.length(); i++) {
        stack = new Stack<Character>();
        stack.push(s.charAt(i));
        top++;
    }

    System.out.println("value of top is " + top);
    String returnString = "";

    while (!stack.isEmpty()) {
        returnString += stack.pop();
    }
    System.out.println(returnString);

    return returnString.equals(s);
}
}

public class PalindromeChecker {
public static void main(String[] args) {
    Palindromer palin = new Palindromer();
    if (palin.isPalindrome("BananaB")) {
        System.out.println("is palindrome");
    } else {
        System.out.println("not a palindrome");
    }
}
}

您应该将 new Stack<Character>(); 放在循环之外。

你做事的方式:

    for (int i = 0; i < s.length(); i++) {
        stack = new Stack<Character>();
        stack.push(s.charAt(i));
        top++;
    }

stack 变量在每个循环中被重新分配,并且在循环后仅包含一个字符。改成

    stack = new Stack<Character>();
    for (int i = 0; i < s.length(); i++) {
        stack.push(s.charAt(i));
        top++;
    }

顺便说一句:最好在 isPalindrome 方法中声明 stacktop。因此,您可以通过进一步调用消除 top 中的错误。

您应该在循环外初始化堆栈,即

for (int i = 0; i < s.length(); i++) {
        stack = new Stack<Character>();
        stack.push(s.charAt(i));
        top++;
    }

应该是

stack = new Stack<Character>();
for (int i = 0; i < s.length(); i++) {

        stack.push(s.charAt(i));
        top++;
    }

使用以下版本的 isPalindrome 方法,Stack 对象在循环的每次迭代中都被实例化,因此您没有得到预期的行为。

public boolean isPalindrome(String s) {
    stack = new Stack<Character>(); 
    for (int i = 0; i < s.length(); i++) {
        stack.push(s.charAt(i));
        top++;
    }

    System.out.println("value of top is " + top);
    String returnString = "";

    while (!stack.isEmpty()) {
        returnString += stack.pop();
    }
    System.out.println(returnString);

    return returnString.equals(s);
}