【stack使用-括号匹配问题】

1、问题:

Java实现括号是否匹配(给定一串字符串看括号是否成对出现)

​​​​​​​思路:

1.1、将字符串的每个字符进行遍历
1.2、如果发现是左括号,那么将该字符压入到栈中
1.3、如果是右括号,先去存储好的栈顶找到相应的值
1.4、若栈为空返回false,若匹配,pop该左括号,若不匹配也返回false
1.5、最后看存储栈中的做括号是否都匹配上了,也就是栈最后为空,返回true,否则返回false

2、代码

package com.liuy;

import java.util.HashMap;
import java.util.Map;
import java.util.Stack;

/**
 * Java实现括号是否匹配(给定一串字符串看括号是否成对出现)
 * 
 * 
1、将字符串的每个字符进行遍历
2、如果发现是左括号,那么将该字符压入到栈中
3、如果是右括号,先去存储好的栈顶找到相应的值
4、若栈为空返回false,若匹配,pop该左括号,若不匹配也返回false
5、最后看存储栈中的做括号是否都匹配上了,也就是栈最后为空,返回true,否则返回false
 * @author Liuy
 *
 */
public class TestStack {

	static boolean isMatch(String s) {
		Map<Character,Character> bracket= new HashMap<Character,Character>();
		bracket.put(')', '(');
		bracket.put(']', '[');
		bracket.put('}', '{');
		
		Stack stack = new Stack();
		for(int i=0;i<s.length();i++)
		{
			Character temp = s.charAt(i);//先转换成字符
			//是否为左括号
			if(bracket.containsValue(temp))
			{
				stack.push(temp);
				//是否为右括号
			}else if(bracket.containsKey(temp)){
				//如果栈为空,则没有括号
				if(stack.isEmpty())
				{
					return false;
				}
				//若左右括号匹配
				if(stack.peek() == bracket.get(temp))
				{
					return true;
				}
				else {
					return false;
				}
			}
		}
		return stack.isEmpty()?true:false;
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println(isMatch("(})}"));
		System.out.println(isMatch("(){}[]"));
		System.out.println(isMatch("00000"));
	}

}

 

转载于:https://my.oschina.net/maojindaoGG/blog/3058447

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值