前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OJ刷题记录:判断一个字符串中括号是否匹配 题目编号:616

OJ刷题记录:判断一个字符串中括号是否匹配 题目编号:616

作者头像
英雄爱吃土豆片
发布2020-10-29 11:01:23
5140
发布2020-10-29 11:01:23
举报
文章被收录于专栏:英雄爱吃土豆片

判断一个字符串中括号是否匹配 题目编号:616

题目要求:

从键盘读入一个字符串,其中只含有() {} [ ] ,判断该字符串中的每种括号是否成对出现。

提示:可借助栈来实现,括号必须配对出现,如()[ ]{},这是匹配的括号,如([{])},这是不匹配的括号(中间无空格)。

输入描述

输入一个字符串(中间不包含空格)

输出描述

匹配输出yes,否则输出no

输入样例

(([{}]))

输出样例

yes

解题思路: 使用栈可以很巧妙的解决这个问题。遍历字符串,若字符为左括号,则将这个字符入栈,若为右括号,则从栈里弹出一个字符,判断弹出的这个字符是否为对应的左括号,若是,则继续遍历,若不是,则括号不匹配,退出循环,返回判断结果。循环结束后,根据判断结果输出 yes 或者 no。

通关代码:

代码语言:javascript
复制
#include <iostream>

#define MaxSize 100

using namespace std;

class Matcher {
	public:
		Matcher();
		
	public:
		void Push(char ch);
		char Pop();
		bool isEmpty();		
		bool Match(string str);
		
	private:
		char arr_[MaxSize];
		int top_;
};

Matcher::Matcher() {
	top_ = -1;
}

void Matcher::Push(char ch) {
	if (top_ == MaxSize) throw "上溢";
	
	arr_[++top_] = ch;
}

char Matcher::Pop() {
	if (top_ < 0) throw "None";
	
	char res = arr_[top_];
	top_--;
	
	return res;
}

bool Matcher::isEmpty() {
	return top_ < 0 ? true : false;
}

bool Matcher::Match(string str) {
	int LEN = str.size();
	bool isMatch = true;
	
	for (int i = 0; i < LEN; i++) {
		if (str[i] == '(' || str[i] == '[' || str[i] == '{') {
			Push(str[i]);
		} else {
			
			if (str[i] == ')') {
				if (isEmpty() || Pop() != '(') {
					isMatch = false;
					break;
				}
			} else if (str[i] == ']') {
				if (isEmpty() || Pop() != '[') {
					isMatch = false;
					break;
				}
			} else if (str[i] = '}') {
				if (isEmpty() || Pop() != '{') {
					isMatch = false;
					break;
				}
			}
			
		}
	}
	
	return isMatch;
} 

int main() {
	Matcher m;
	string str;
	
	cin >> str;
	
	cout << (m.Match(str) ? "yes" : "no");
	
	return 0;
}

毕。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/09/27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 判断一个字符串中括号是否匹配 题目编号:616
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档