题解 | #合法的括号字符串#
合法的括号字符串
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表示遇到的开放括号的最大计数,即记录每个时刻未匹配的左括号数量的最大值。
查看19道真题和解析
