经典的回文序列判断问题,博主在学数据结构时遇到的一道作业题,当时老师让用栈做的,将我自己写的程序分享一下:
题目:编写一个程序判别读入的字符序列是否为“回文序列”,所谓回文就是正读和反读都相同的字符序列,例如: abcdedcba 或 abccba 是回文。
import java.util.Scanner;
public class IsHuiWen {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("输入字符串:");
String text = scanner.nextLine();
SqStack stack = new SqStack(100);
char c;
for (int i = 0; i <= text.length()/2-1; i++) {
c = text.charAt(i);
try {
stack.push(c);
} catch (Exception e) {
e.printStackTrace();
}
}
if(text.length() % 2 == 1) {
for (int j = text.length() / 2 + 1; j <= text.length() - 1; j++) {
c = text.charAt(j);
if (c == (Character) stack.peek()) {
stack.pop();
} else {
System.out.println(text + " " + "不是回文序列");
break;
}
}
}
else{
for (int j = text.length() / 2 ; j <= text.length() - 1; j++) {
c = text.charAt(j);
if (c == (Character) stack.peek()) {
stack.pop();
} else {
System.out.println(text + " " + "不是回文序列");
break;
}
}
}
if(stack.isEmpty()){
System.out.println(text + " "+"是回文序列");
}
}
}
public interface IStack{
public int length();
public boolean isEmpty();
public Object peek();
public void display();
public Object pop();
public void push(Object x)throws Exception;
}
public class SqStack implements IStack{
private Object[] stackElem;
private int top;
public SqStack(int maxSize){
top=0;
stackElem=new Object[maxSize];
}
public int length(){
return top;
}
public void display(){
for(int i=top-1;i>=0;i--){
System.out.print(stackElem[i].toString()+" ");
}
}
public void push(Object x)throws Exception{
if(top==stackElem.length)
throw new Exception("栈已满");
else
stackElem[top++]=x;
}
public Object peek(){
if(!isEmpty())
return stackElem[top-1];
else
return null;
}
public boolean isEmpty(){
return top==0;
}
public Object pop(){
if(isEmpty())
return null;
else
return stackElem[--top];
}
}