前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【stack使用-括号匹配问题】

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

作者头像
用户5640963
发布2019-07-25 15:34:06
1.1K0
发布2019-07-25 15:34:06
举报
文章被收录于专栏:卯金刀GG卯金刀GG卯金刀GG

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"));
	}

}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档