0
点赞
收藏
分享

微信扫一扫

牛客网简单题型练习第四弹

落拓尘嚣 2022-03-11 阅读 79

 

 

那我们只能用到栈了 

首先定义一个空的栈

Stack<Character> stack = new Stack<Character>();

需要用到栈的思想, 不断将左括号推入栈中, 然后每次遇到一个右括号从栈中弹出一个左括号, 以此删除左侧并列关系的括号, 从而使每次计算左括号次数都只包含当前串联关系的左括号数量.

 我们慢慢来看:

首先当我们输入((()()))

str.charAt(i) 在循环i的数值时 依次输出 1.(  2.(  3.(   4. ) 5. (  6 . ) 7. ) 8. )

第一次循环是( 也就是 c=(

然后( ==(   

if( (==( )正确   往下执行

给栈加元素 

st.push(c);

此时 栈 里面就有了一个 左括号 (

继续执行语句:

 maxVal = Math.max(maxVal, st.size());

maxVal我们前面定义了:

int maxVal = 0;

这样的话如果 括号是平行  的话 我们用此函数   深度就不会重复多加一了

详细说一下 

继续执行 第二次循环 c=(

然后( ==(   

if( (==( )正确   往下执行

给栈加元素 

st.push(c);

此时 栈 里面就有了两个 左括号 (  (

继续执行下一条语句

 maxVal = Math.max(maxVal, st.size());

继续执行语句:

 maxVal = Math.max(maxVal, st.size());

继续执行 第三次循环 c=(

然后( ==(   

if( (==( )正确   往下执行

给栈加元素 

st.push(c);

此时 栈 里面就有了三个 左括号 (  ((

继续执行下一条语句

 maxVal = Math.max(maxVal, st.size());

继续执行语句:

 maxVal = Math.max(maxVal, st.size());

继续执行 第四次循环 c=)

然后第二个if语句  :)=)

if( )==))正确   往下执行

给栈减元素 

st.pop();

那之前栈里是 三个左括号 (((

现在减一个 (

那就是还有两个左括号 ((      此时st.size() 是2 因为有两个括号

继续执行 第五次循环 c=(

然后( ==(   

if( (==( )正确   往下执行

给栈加元素 

st.push(c);

此时 栈 里面就有了三个 左括号 (  ((  此时st.size() 是3 因为有3个括号

继续执行下一条语句

 maxVal = Math.max(maxVal, st.size());

继续执行语句:

 maxVal = Math.max(maxVal, st.size());

继续执行 第六次循环 c=)

然后第二个if语句  :)=)

if( )==))正确   往下执行

给栈减元素 

st.pop();

那之前栈里是 三个左括号 (((

现在减一个 (

那就是还有两个左括号 ((  此时st.size() 是2 因为有两个括号

继续执行 第7次循环 c=)

然后第二个if语句  :)=)

if( )==))正确   往下执行

给栈减元素 

st.pop();

那之前栈里是 2个左括号 ((

现在减一个 (

那就是还有1个左括号 (

继续执行 第8次循环 c=)

然后第二个if语句  :)=)

if( )==))正确   往下执行

给栈减元素 

st.pop();

那之前栈里是 1个左括号 (

现在减一个 (

那就是没有括号啦

结果也出来了

System.out.println(maxVal);
举报

相关推荐

0 条评论