给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。
括号这种问题有点抽象,参考了下标准答案给出代码。
package likouhot;
import java.util.HashMap;
import java.util.Map;
import java.util.Stack;
/*
* 20.有效的括号
*/
public class Demo20 {
public boolean isValid(String s) {
int length = s.length();
//如果s字符串有奇数个元素,则肯定不满足
if(length % 2 ==1) {
return false;
}
Map<Character,Character> map = new HashMap<Character,Character>();
map.put(')', '(');
map.put(']', '[');
map.put('}', '{');
char[] chararray = s.toCharArray();
Stack<Character> stack = new Stack();
for(int i=0;i<length;i++) {
char tempchar = chararray[i];
if(map.containsKey(tempchar)) {
/*
* 1.如果栈为空,则相当于第一个元素就有括号的右半部分,肯定不满足
* 2.如果栈不为空,则当栈顶元素如果不是括号的左半部分,则肯定不满足
* 3.当情况满足时,则将栈顶元素弹出
*/
if(stack.isEmpty() || stack.peek()!=map.get(tempchar)) {
return false;
}else {
stack.pop();
}
}else {
stack.push(tempchar);
}
}
//如果遍历结束后,stack为空,则满足
return stack.isEmpty();
}
public static void main(String args[]) {
Demo20 demo = new Demo20();
String s = "((";
System.out.println(demo.isValid(s));
}
}