判断括号是否合法

题目:

2. 标题:合法括号序列判断 | 时间限制:3秒 | 内存限制:32768K | 语言限制:[Python, C++, C#, Java] 对于一个字符串,请设计一个算法,判断其是否为一个合法的括号串。
给定一个字符串A和它的长度n,请返回一个bool值代表它是否为一个合法的括号串。
一个合法的括号串定义为:1.只包括括号字符;2.左括号和右括号一一对应
测试样例:
"(()())",6
返回:true
测试样例:
"()a()()",7
返回:false
测试样例:
"()(()()",7
返回:false


解题思路:

首先可以知道当字符串长度不是偶数时 那么这段字符串肯定不是合法的括号字符串

其次字符串中有其他字符存在 那么也不是合法的字符串

除去上面的情况 然后我们遍历字符串 分别计数左括弧 和 右括弧的个数

由于字符串要合法 所以一个左括弧要与一个右括弧对应 当左括弧数等于右括弧数时这段字符串合法

但是需要注意的是 从左往右遍历 有一个左括弧才能有一个右括弧 所以当右括弧数大于左括弧数时 这段字符串不合法


代码展示:

#include 
#include 
using namespace std;

class Parenthesis {
public:
	bool chkParenthesis(string A, int n) {
		int left = 0;
		int right = 0;
		if (n%2) {
			return false;
		}
		for (int i = 0;i < n;i++) {
			if ((A[i] != '(' )&&( A[i] != ')')) {
				return false;
			}
			if (A[i] == '(') {
				left++;
			}
			if (A[i] == ')') {
				right++;
			}
			if (right > left) {
				return false;
			}
		}
		if (left == right) {
			return true;
		}
		return false;
	}
};

int main() {
	int n;
	Parenthesis A;
	string s;
	getline(cin, s);
	cin >> n;
	cout<

 

你可能感兴趣的:(C++)