LeetCode 有效的括号的两种方法

如果表达式中的括号成对出现则合法;否则不合法。

例一:

输入:

“{()[ ]()}”

输出:

true;

例二:

输入:

“{()[](}”

输出:false;

方法一:

利用Ascii的差值判断是否为一对,(),{},[]的左右差值为1或2;如果为一对,栈定元素弹栈;

如果不是则进栈;

代码如下:

import java.util.LinkedList;


public class Text {
	

	public static void main(String[] args) {
		String str = "(){[()]()}";
		System.out.print(isLegal(str));
	}

	public static boolean isLegal(String str) {
		
		LinkedList<Character> stack = new LinkedList<Character>();
		// TODO Auto-generated method stub
		for(int i=0;i<str.length();i++){
			char c= str.charAt(i);
			if(stack.isEmpty()){
				stack.push(c);
			}else{
				Character ch = stack.peek();
				if(c-ch==1||c-ch==2){
					stack.pop();
					
				}else{
					stack.push(c);
				}
				
			}
		}
		if(stack.size()==0)
		return true;
		return false;
		
	}

}

方法二:

利用HashMap键值对的特性,将括号的一半命名为键另一半为值;获取键的值与栈顶元素比较若

相等则将栈顶元素弹栈否则入栈;

import java.util.HashMap;

public class MatchBracket {
    
    public static void main(String[] args) {
        
        solution02();
    }
    
    private static void solution02() {
        String str = "{()[[()]]<{()>}()";
        HashMap<Character,Character> map = new HashMap<>();
        map.put('[',']');
        map.put('<','>');
        map.put('(',')');
        map.put('{','}');
        ArrayStack<Character> stack = new ArrayStack<>();
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            if (stack.isEmpty()) {
                stack.push(c);
            } else {
                char top = stack.peek();
                if (map.containsKey(top) && c == map.get(']')) {
                    stack.pop();
                } else {
                    stack.push(c);
                }
            }
        }
        System.out.println(stack.isEmpty());
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值