java中的括号检查器
我用java编写了一个括号检查器程序,该程序从标准输入读取文本流,并使用堆栈确定其括号是否正确平衡。例如,它应该为java中的括号检查器,java,stack,parentheses,Java,Stack,Parentheses,我用java编写了一个括号检查器程序,该程序从标准输入读取文本流,并使用堆栈确定其括号是否正确平衡。例如,它应该为[()]{}{[()()]()}打印true,为[(])打印false。我为这个问题创建了自己的堆栈类: public class Stack { private char items[]; private int top; Stack(int n){ items = new char[n]; top = -1; } void push(char c){
[()]{}{[()()]()}
打印true,为[(])
打印false。我为这个问题创建了自己的堆栈类:
public class Stack {
private char items[];
private int top;
Stack(int n){
items = new char[n];
top = -1;
}
void push(char c){
if(top == items.length-1){
System.out.println("Stack full.");
return;
}
top++;
items[top] = c;
}
char pop(){
if(isEmpty()){
System.out.println("Stack empty");
return (char)0;
}
char p;
p = items[top];
top--;
return p;
}
boolean isEmpty(){
if(top == -1)
return true;
else
return false;
}
}
下面的checkValid
方法接受字符串输入,如果括号匹配,则返回true;如果括号不匹配,则返回false
public static Boolean checkValid(String str){
char sym,prev;
Stack s = new Stack(str.length());
for(int i=0; i<str.length();i++){
sym = str.charAt(i);
if(sym == '(' || sym=='{' || sym=='['){
s.push(sym);
}
if(sym == ')' || sym=='}' || sym==']'){
if(s.isEmpty()){
return false;
}
else{
prev = s.pop();
if(!isPairMatch(prev,sym))
return false;
}
}
}
if(!s.isEmpty())
return false;
return true;
}
public static boolean isPairMatch(char character1, char character2){
if(character1 == '(' && character2 == ')')
return true;
else if(character1 == '{' && character2 == '}')
return true;
else if(character1 == '[' && character2 == ']')
return true;
else
return false;
}
}
公共静态布尔校验有效(字符串str){
char-sym,prev;
堆栈s=新堆栈(str.length());
对于(int i=0;i,如果堆栈不是保存chars
,而是保存一个类,该类在输入字符串中同时包含char
和该char
的索引,则可以打印不匹配括号的索引
编辑:
仅当您希望两个未通过isPairMatch
测试的不匹配括号的索引时,才需要此解决方案
例如,如果有字符串“[{}{}{}”,则不匹配的对是第一个“[”和最后一个“)”,其索引为0和7
如果只需要第一个不匹配括号的索引(即索引为0的第一个“[”),您只需在删除括号后检查堆栈的大小。在本例中,检查最后一对时,堆栈将为空,因此堆栈的大小将为0,这是失败的isPairMatch
测试的第一个字符的索引。那么,不匹配的括号的位置应与堆栈的大小(或“大小-1”)。然后程序是否能够检查某个特定的开始括号是否有正确的结束括号?您需要一个映射,其中k是索引,v是值,即括号。@rick112358您的算法将保持不变。唯一的区别是不是(例如)按{'到堆栈中,您将推送新项目({',4)。isPairMatch
将接收两个项目而不是两个字符,如果存储在这些项目中的字符对不匹配,您可以打印这些字符的索引。我只能使用堆栈。不允许使用映射