题意:找出一个字符串中最长的左右括号匹配长度。
思路:维护一个栈,遇见’(‘,就进栈;否则,如果弹出当前元素,如果当前弹出后栈为空,则说明匹配,维护一个合法的位置start,当前最长匹配就是i-start;如果弹出后栈不为空,最长匹配长度就是当前的i值减去栈顶的元素。
代码:
public int CalLongest(String string){
if(string == null || string.length() == 0) return -1;
Stack<Integer>stack = new Stack<>();
int start = 0;
int max = 0;
for(int i = 0 ; i < string.length() ; i++){
if(string.charAt(i) == '(') stack.push(i);
else{ if(stack.isEmpty()){
start = i;
}else {
stack.pop();
if(stack.isEmpty()){
max = Math.max(max , i - start);
}else{
max = Math.max(max , i -stack.peep())
}
}
}