题目描述:
给出一个仅包含字符’(’,’)’,’{’,’}’,’[‘和’]’,的字符串,判断给出的字符串是否是合法的括号序列
括号必须以正确的顺序关闭,"()“和”()[]{}“都是合法的括号序列,但”(]“和”([)]"不合法。
思想描述:
用栈,栈为空则合法。
package niu;
import java.util.Scanner;
import java.util.Stack;
public class niuKe007 {
/**
*给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列
*括号必须以正确的顺序关闭,"()"和"()[]{}"都是合法的括号序列,但"(]"和"([)]"不合法。
* 思想:用栈,栈为空则合法。
*
* @param s string字符串
* @return bool布尔型
*/
public boolean isValid (String s) {
// write code here
String[] ss = s.split("");
Stack<String> stack = new Stack<>();
int s1=0,s2=0,s3=0;
for(int i=0; i< ss.length; i++) {
stack.push(ss[i]);
if (ss[i].equals("(")) {
s1 = s1 + 1;
}
else if (ss[i].equals("[")) {
s2 = s2 + 1;
}
else if (ss[i].equals("{")) {
s3 = s3 + 1;
}
else if (s1 >= 1 && ss[i].equals(")")) {
s1 = s1 - 1;
stack.pop();
if(stack.peek().equals("(")) {
stack.pop();
}
else{
stack.push(ss[i]);
}
}
else if (s2 >= 1 && ss[i].equals("]")) {
s2 = s2 - 1;
stack.pop();
if(stack.peek().equals("[")) {
stack.pop();
}
else{
stack.push(ss[i]);
}
}
else if (s3 >= 1 && ss[i].equals("}")) {
s3 = s3 - 1;
stack.pop();
if(stack.peek().equals("{")) {
stack.pop();
}
else{
stack.push(ss[i]);
}
}
}
if(stack.empty()){
return true;
}
else{
return false;
}
}
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
String s = sc.nextLine();
niuKe007 vaild = new niuKe007();
boolean isvaild = vaild.isValid(s);
System.out.print(isvaild);
}
}