如数一组字符串,看是否符合一下两个条件: 1、字符只有(和) 2、看(和)是否匹配 如:输入:((1)) 返回false 输入:((()) 返回false 输入:(()) 返回true
思路:先用toCharArray方法把字符串拆成一个数组,然后遍历数组的每一个元素,若遇到左括号,就入栈,若遇到右括号,就去栈里找,看有没有左括号与之匹配
1、用stack.push()入栈,stack.pop()出栈
2、若遇到右括号,去栈里找,栈为空,rerturn false
3、若最后一个元素为左括号,return false
4、遍历完,检查stack是否为空,其实第3步可以剩,因为4以及包含了这种情况
import java.util.Stack;
import java.util.*;
public class Parenthesis {
public static boolean chkParenthesis(String A, int n) {
// write code here
Stack stack=new Stack();
char[] b=A.toCharArray();//把字符串拆成数组
for(int i=0;i<n;i++){
if(b[i]=='('){ //如果遍历到( 就入栈
stack.push(b[i]);
}
if(b[i]==')'){ //如果遍历到)就去栈内查看是否为空,如果为空,说明没有(与之匹配,return false,如果不为空,提取一个(出来
if (!stack.isEmpty()){
stack.pop();
}
else {
return false;
}
}
if(b[n-1]=='('){ //如果最后一个是(,说明没有)与之匹配,return false
return false;
}
}
if(!stack.isEmpty()){ //为防止还两个及两个以上的(多出来,遍历完所有之后,再检查数组,如果还有剩余,return false
return false;
}else {
return true;
}
}
public static void main(String[] args) {
String A="(()))";
int n=5;
System.out.println(chkParenthesis(A,n));
}
}