java只用栈判断字符串是否回文

2024年11月29日 18:38
有2个网友回答
网友(1):

import java.util.ArrayList;
import java.util.List;
public class StackTest {
 /**
  * @param args
  */
 public static void main(String[] args) {
  String str = "abcba";
  System.out.println(str + "回文数:" + isPalindrome(str));
  
  str = "abccba";
  System.out.println(str + "回文数:" + isPalindrome(str));
  
  str = "123321";
  System.out.println(str + "回文数:" + isPalindrome(str));
  
  str = "1238887321";
  System.out.println(str + "回文数:" + isPalindrome(str));
 }
 /**
  * 

判断输入字符串是否为回文


  * @param pValue String 输入待判定的字符串
  * @return boolean 是否是回文
  */
 public static boolean isPalindrome(String pValue){
  // 堆栈一
  List  stack = new ArrayList();
  // 堆栈二
  List  stack2 = new ArrayList();
  // 字符串长度的一半
  int haflen = pValue.length()/2;
  
  for(int i=0;i   // 字符进栈
   stack.add(pValue.charAt(i));
   // 倒序进栈
   stack2.add(pValue.charAt(pValue.length()-i-1));
  }
  // 标识符
  boolean bFlag = true;
  // 出栈并比较
  for(int i=haflen-1;i>=0;i--){
   if(stack.remove(i) != stack2.remove(i)){
    bFlag = false;
    break;
   }
  }
  // 返回比对结果
  return bFlag;
 }
}

    你这是作业题吧,其实最简单直接用循环然后charAt()把第一个和最后一个取出来比较就可以了。要用栈的话,我就用List来模拟栈。我们知道栈只有两个基本的操作进栈和出栈,用ArrayList的add(),remove()来模拟进栈和出栈。上面的代码和你的思路是一样的,但是简化掉奇偶数的判定,因为是奇数的时候,最中间一个我们可以不用管它,是偶数的话就是前半部分和后半部分的比较。

网友(2):

你这种普遍的输出固然没问题。。但是,如果要用栈处理如下的话,可能就会出错了:
abccbaab11ba
一般处理回文不会用栈结构。。当然,如果你说用两个栈的话,就没什么意义了