说明:
从字符串后到前面以此遍历,)入栈,
( 则判断&&栈为空,--->标记上限
( 并且栈顶为)出栈,计数。
这种做法缺点:无法判断 ())()这种情况
如果按照字符串从前往后 无法判断 ()(()()这个标记上限的时候无法标记。后续有待改进。
function longValidBrackets(str){
var s = [];
var count = 0;
var max = 0;
var index = str.length -1;
var ch = '';
while(index >= 0){
ch = str.charAt(index);
if(ch === '(' && s.length === 0 || ch !== ')' && ch !== '('){
while(s.length != 0 ){
s.pop();
}
if(max < count)
max = count;
count = 0;
}else if(ch === '(' && s[s.length-1] === ')'){
s.pop();
++count;
}else if(ch === ')'){
s.push(ch);
}
index--;
}
if(max < count){
max = count;
}
return max*2;
}
var str1 = "(())"; //4
var str2 = "((a))"; //0
var str3 = "(()"; //2
var str4 = "{()}"; //2
var str5 = "()(()()("; //4