import java.util.LinkedList;
/**
* 匹配括号字符串的左右个数是匹配
* @author Administrator
*
*/
public class Strkuohao {
public static boolean StrKuoHaoMat(String a){
LinkedList<String> list=new LinkedList<String>();//采用LinkedList是因为该集合增删速度比较快
for(int i=0;i<a.length();i++){
if(a.charAt(i)=='('){
list.add("(");
}
else {
try {//这里当集合中没有元素时,继续删除会报异常,直接返回false
list.removeLast();
} catch (Exception e) {
return false;
}
}
}
if(list.size()==0){//集合判断是否为空,借助size(),不能用null
return true;
}
else{
return false;
}
}
public static void main(String args[]){
System.out.println(StrKuoHaoMat("((()))()()(())"));
System.out.println(StrKuoHaoMat("((())))()()(())"));
System.out.println(StrKuoHaoMat("(()())()"));
}
}
思想很简单:就是借助LinedList集合的有序有索引来进行压栈和出栈操作,当匹配完,其长度为0,则表示匹配成功
下面是python版本,果真你妈方便
#__author:Administrator
#date:2019/7/20
"""
匹配字符串括号的左右个数是否成对匹配
"""
def strkuohaomat(s):
a=[]
for i in s:
if i=="(":
a.append("(")
else:
if a.__len__()==0:
return False
else:
a.pop()
if len(a)==0:
return True
else:
return False
if __name__=="__main__":
print(strkuohaomat("((()))()()(())"))
print(strkuohaomat("((())))()()(())"))
print(strkuohaomat("(()())()"))