力扣(LeetCode) 20. 有效的括号

给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。

示例 1:

输入: "()"
输出: true

示例 2:

输入: "()[]{}"
输出: true

示例 3:

输入: "(]"
输出: false

示例 4:

输入: "([)]"
输出: false

示例 5:

输入: "{[]}"
输出: true

思路1 list 模拟栈,只能在栈顶进行入栈和出栈

思路2 使用Stack栈

Java版(思路1)

class Solution {
    public boolean isValid(String s) {
        boolean flag = true;
		List<String> list = new ArrayList<>();
		for(int i=0;i<s.length();i++) {
			String temp = s.substring(i, i+1);
			if( temp.equals("(") || temp.equals("[") || temp.equals("{")) {
				//System.out.println("add---"+temp);
				list.add(temp);
			}else if(temp.equals(")")) {
				if(list.size()>0 &&  list.get(list.size()-1).equals("(")) {
					//System.out.println("delete---"+list.get(list.size()-1));
					list.remove(list.size()-1);
				}else {
					flag = false;
					break;
				}
			}else if(temp.equals("]")) {
				if(list.size()>0 &&  list.get(list.size()-1).equals("[")) {
					//System.out.println("delete---"+list.get(list.size()-1));
					list.remove(list.size()-1);
				}else {
					flag = false;
					break;
				}
			}else if(temp.equals("}")) {
				if(list.size()>0 &&  list.get(list.size()-1).equals("{")) {
					//System.out.println("delete---"+list.get(list.size()-1));
					list.remove(list.size()-1);
				}else {
					flag = false;
					break;
				}
			}
		}
		if(flag && list.size()==0) {
			//System.out.println(true);
            return true;
		}else {
			//System.out.println(false);
            return false;
		}
		
    }
}

Java版(思路2)

class Solution {
    public boolean isValid(String s) {
       Stack<String> stack = new Stack<>();
		for(int i=0;i<s.length();i++) {
			String temp = s.substring(i, i+1);
			if(temp.equals("(") || temp.equals("[") || temp.equals("{")) {
				stack.push(temp);
			}else if(!stack.isEmpty() &&   temp.equals(")")  &&  stack.pop().equals("(")) {
			}else if(!stack.isEmpty() &&   temp.equals("]")  &&  stack.pop().equals("[")) {
			}else if(!stack.isEmpty() &&   temp.equals("}")  &&  stack.pop().equals("{")) {
			}else {
				return false;
			}
		}
		if(stack.isEmpty()) {
			return true;
		}else {
			return false;
		} 
    }
}

运行结果

posted @ 2019-04-10 22:54  lick  阅读(405)  评论(0编辑  收藏  举报