回文使用栈
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
方法中声明 stack
和 top
。因此,您可以通过进一步调用消除 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);
}
我在 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
方法中声明 stack
和 top
。因此,您可以通过进一步调用消除 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);
}