括号匹配算法,自用修改版({,[,()
修改点
网上的很多匹配方法对于“{}}}{{{}”类似这种类型的无法正确处理,于是我自己加了一个判断:如果字符串前一半中右括号个数大于左括号个数直接返回false。
为了减少代码量,所以使用java,代码如下:
代码
public static boolean matching(String str){
Stack<Character> st= new Stack();
int left_num = 0;
int right_num = 0;
for(int l = 0; l < (str.length()/2); l++)
{
if(str.charAt(l) == '{' ||
str.charAt(l) == '[' ||
str.charAt(l) == '(')
{
left_num++;
}
else
{
right_num++;
}
}
if(right_num > left_num)
{
System.out.println("个数不符合" + "left_num: " + left_num + ", right_num: " + right_num);
return false;
}
for(int i = 0; i <str.length(); i++)
{
if(str.charAt(i) == '{' ||
str.charAt(i) == '[' ||
str.charAt(i) == '(')
{
st.push(str.charAt(i));
}
}
for(int j = 0; j <str.length(); j++)
{
switch(str.charAt(j))
{
case ')':
if(st.pop() != '(')
{
System.out.println("第" + (j+1) +"处" +")不匹配");
return false;
}
break;
case ']':
if(st.pop() != '[')
{
System.out.println("第" + (j+1) +"处" +"]不匹配");
return false;
}
break;
case '}':
if(st.pop() != '{')
{
System.out.println("第" + (j+1) +"处" +"}不匹配");
return false;
}
break;
default:
break;
}
}
if(st.isEmpty() != true)
{
System.out.println("栈不为空");
return false;
}else
{
return true;
}
}
public static void main(String[] args) {
System.out.println(matching("{}}}{{{}"));
}