题目:给定一个字符串,判断是否合规。比如(),()(),(())是合规的,)(( , ()) , (()是不合规的。
三种解法:
//第一种解法使用String.replace方法,面试官说不可以调用String的API
public static boolean solution1(String s){ while (s.contains("()")){ s = s.replace("()",""); } return s.length() == 0; }
//第二种解法使用的栈空间,面试官说不能开辟新的空间
public static boolean solution2(String s){ Stack stack = new Stack(); String[] ss = s.split(""); if (s.length() ==0){ return true; } for(int i=0;i<ss.length;i++){ if(ss[i].equals("(")){ stack.push(ss[i]); }else if (stack.size()>0){ stack.pop(); }else { return false; } } return stack.size() == 0; }
//第三种方法,在面试官的提示下,使用计数器
public static boolean solution3(String s){ int num = 0; char[] c = s.toCharArray(); for(int i=0;i<c.length;i++){ if(c[i] -'(' == 0){ num++; }else if (c[i] -')' == 0){ num--; if(num <0){ return false; } } } return num == 0; }