题解 | #合法的括号字符串#
合法的括号字符串
https://www.nowcoder.com/practice/eceb50e041ec40bd93240b8b3b62d221
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param s string字符串 * @return bool布尔型 */ public boolean isValidString (String s) { // write code here int l=s.length(); Stack<Integer> stack=new Stack<>(); int count=0; int xing=0; int max=0; int min=0; //(*) //1,1 ;2,0;1,0 //(*(*))(() //1,1;2,0;3,1; for(int i=0;i<l;i++) { if(s.charAt(i)=='(') { max++; min++; }else if(s.charAt(i)==')') { if(min>0)//有(就减 { min--; } if(max==0)//没有匹配的了(|* { return false; } max--;//(|*--// }else { max++; if(min>0) { min--; } } } // for(int i=0;i<l;i++) // { // char ch=s.charAt(i); // if(ch=='(') // { // // stack.push(1); // count++; // } // else if(ch==')') // { // count--; // if(count<0&&xing==0) // { // return false; // } // if(count<0&&xing>0) // { // count++; // xing--; // } // if(count==0&&xing>0) // { // xing=0; // } // // if(stack.empty()) // // { // // return false; // // } // // stack.pop(); // } // else if(ch=='*') // { // xing++; // } // } // if(count==0||count<=xing) // { // return true; // } // return false; return min==0; } }
min
表示遇到的开放括号的最小计数,即记录每个时刻未匹配的左括号数量的最小值。max
表示遇到的开放括号的最大计数,即记录每个时刻未匹配的左括号数量的最大值。