题目
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
题解
ASCII码
{:123 }:125
[:91 ]:93
(:40 ):41
1、新建栈,确认字符串是否为空,若非空则将第一个字符入栈
2、开始对字符串进行遍历:
2-1:若字符串与栈顶匹配,则出栈;
2-2:若字符串与栈顶不匹配,则进行入栈操作
2-2-1:入栈操作检测栈顶括号等级是否大于等于入栈括号的等级,若大于则入栈,若小于则返回false
程序
1、自定义栈类别
public class Stack {
private char[] a; //定义栈
private int size; //定义栈大小
private int top; //定义栈顶位置
public Stack(int maxsize) { //构建初始栈大小
this.size = maxsize;
this.a = new char[size];
this.top = -1;
}
public char peek() { //查询栈顶的值
if(this.isEmpty()){
System.out.println("no available data");
return 0;
}
return a[top];
}
public void push(char value){ //入栈
if(this.isFull()){
System.out.println("stack is full");
return ;
}
a[++top] = value;
}
public char pop(){ //出栈
if(this.isEmpty()){
System.out.println("no available data");
return 0;
}
return a[top--];
}
public int size(){ //栈的大小
return top+1;
}
public boolean isEmpty(){ //判断栈是否为空
return (top == -1);
}
public boolean isFull(){ //判断栈是否满
return (top == size -1);
}
public void display(){ //打印栈
for(int i = top; i >= 0; i--){
System.out.println(a[i]+" ");
}
System.out.println(" ");
}
}
2、主程序及其测试用例
public class IsValid {
public boolean isValid(String s) {
boolean b = false;
Stack S = new Stack(s.length());
char[] c = s.toCharArray();
if(s == "") {
return true;
}else {
S.push(c[0]);
}
for(int i = 1;i < s.length(); i++) {
switch (c[i]) {
case 123:
if(S.peek() == 123) {
S.push(c[i]);
}
break;
case 91:
if(S.peek() == 91 || S.peek() == 123) {
S.push(c[i]);
}
break;
case 40:
if(S.peek() == 91 || S.peek() == 123 || S.peek() == 41) {
S.push(c[i]);
}
break;
case 125:
if(S.peek() == 123) {
S.pop();
}
break;
case 93:
if(S.peek() == 91) {
S.pop();
}
break;
case 41:
if(S.peek() == 40) {
S.pop();
}
break;
default:
System.out.println("字符输入异常");
return false;
}
}
if(S.isEmpty()) {
b = true;
}
return b;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
IsValid V = new IsValid();
String l = "{[]}"; //测试用例,修改此处可进行函数测试
boolean b;
b = V.isValid(l);
System.out.println(b);
}
}
注:本程序考虑了输入违法字符的状况
>>>Github代码