参考《啊哈!算法》一书,P34页程序。
-
栈:先进后出(压弹)
一个变量:栈顶变量top
对栈顶进行删除和添加 -
题目:回文字符串的判断
要求1): 使用栈的思想做;
要求2): 是回文串输出true,不是输出false;
完整代码如下:
import java.util.Scanner;
public class Stack {
char [] ch;
public Stack(){
ch = new char [0];
}
//压栈 -添加元素
public void push(char c ){
char [] newCh = new char[ch.length+1];
for (int i = 0; i < ch.length; i++) {
newCh[i]= ch[i];
}
newCh[ch.length] = c;
ch = newCh;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String string = scanner.next();
Stack stack = new Stack();
for (int i = 0; i < string.length(); i++) {
stack.push(string.charAt(i));
}
// 定义一个新的字符数组,用来存储回文串中前部分元素
char [] ch1 = new char[stack.ch.length];
// 字符串的中点
int mid = stack.ch.length/2-1;
// 栈进行初始化
int top = 0;
int next;
for(int i =0 ;i <= mid;i++){
ch1[++top] = stack.ch[i];
}
if(stack.ch.length % 2==0){
next = mid + 1;
}else {
next = mid + 2;;
}
//进行匹配
for(int i = next; i < stack.ch.length;i++){
if(stack.ch[i] != ch1[top])
break;
top--;
}
if(top==0){
System.out.println("true");
}else {
System.out.println("false");
}
}
}
参考博客:栈进行回文串的匹配
改进上述代码:
将弹出栈的元素与栈中前部分元素进行匹配
import java.util.Scanner;
public class Stack1 {
char [] ch;
public Stack1(){
ch = new char [0];
}
//压栈 -添加元素
public void push(char c ){
char [] newCh = new char[ch.length+1];
for (int i = 0; i < ch.length; i++) {
newCh[i]= ch[i];
}
newCh[ch.length] = c;
ch = newCh;
}
//弹栈,获取栈顶元素
public char pop(){
if(ch.length==0){
throw new RuntimeException("Stack is Empty");
}
char element = ch[ch.length-1];
char [] newCh = new char[ch.length-1];
for (int i = 0; i < newCh.length; i++) {
newCh[i] = ch[i];
}
ch = newCh;
return element;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String string = scanner.next();
Stack1 stack = new Stack1();
for (int i = 0; i < string.length(); i++) {
stack.push(string.charAt(i));
}
// 将弹出栈的元素与栈中前部分元素进行匹配
int flag = 0;
for(int i =0 ;i < stack.ch.length; i++){
// 每次获取栈顶元素
char member = stack.pop();
if(member != stack.ch[i]){
flag = -1;
break;
}else flag = 1;
}
if(flag == 1){
System.out.println("true");
}else {
System.out.println("false");
}
}
}
输出结果样例:
键盘输入:
aqwsxzaqwsza
输出结果:
false
键盘输入:
asdffdsa
输出结果:
true