题解 | #括号序列#
括号序列
http://www.nowcoder.com/practice/37548e94a270412c8b9fb85643c8ccc2
import java.util.LinkedList;
import java.util.Stack;
/**
* @ClassName Solution
* @Description TODO
* @Author ylr
* @Date 2021/7/21 11:03
* @Version 1.0
*/
public class Solution {
//开始和结束标识
private static char[] start = {'(', '{', '['};
private static char[] end = {')', '}', ']'};
//判断t在开始集中并返回下标
private int inStart(char t) {
for (int i = 0; i <start.length ; i++) {
if (start[i]==t) return i;
}
return -1;
}
//判断t在结束集中并返回下标
private int inEnd(char t) {
for (int i = 0; i <end.length ; i++) {
if (end[i]==t) return i;
}
return -1;
}
private Stack<Character> stack = new Stack<>();
public boolean isValid(String s) {
int length = s.length();
/*如果长度小于1或者第一个字符是结束符 返回false*/
if (length<=1||inEnd(s.charAt(0))>=0) return false;
int i = 0;
while (i < length) {
char c = s.charAt(i);
/*遍历判断是否在开始集中,在开始集中就入栈,不在就去匹配*/
if (inStart(c)>=0) {
stack.push(c);
} else {
/*匹配 如果栈为空就说明没有匹配对象返回false*/
if (stack.isEmpty()) return false;
/*匹配 开始下标和结束下标是否一样 一样跳过否则返回false*/
if (!stack.isEmpty()&&inEnd(c) == inStart(stack.peek())) {
stack.pop();
} else return false;
}
i++;
}
/*最后 判断一下栈是否为空 为空匹配完成返回true否则匹配出错返回false*/
return stack.isEmpty();
}
public static void main(String[] args) {
System.out.println(new Solution().isValid("(("));
}
}
