题目链接如下:Leetcode 20
大致描述一下题目:
给定一个字符串,只有'(' , ')' , '[', ']' , '{' , '}' 这六个字符,判断是否是有效字符串。
要求如下:
1. 左括号必须与对应的右括号闭合
2. 左括号以正确的顺序闭合
3.空字符串算有效字符串
解题思路:
老套路没啥好说的,用栈处理,类似于Leetcode的第九题 回文数。
注意一些特殊的情况,比如字符串长度是奇数,首字符是右括号肯定不是有效字符串
附上代码如下(C++):
/*******************************************************************************
Copyright © 2018-20xx Qiao Chuncheng, All Rights Reserved.
File name: 020[有效的括号].cpp
Author: Qiao Chuncheng
Version: v1.0
Date: 2018-04-11
*******************************************************************************/
class Solution {
public:
bool isValid(string s) {
bool flag = true;
if (s.size() == 0)
return true; //阅读题目要求后发现空字符串为有效字符串
if (s.size() % 2 != 0)
return false;
if (s[0] == ')' || s[0] == ']' || s[0] == '}')
return false;
stack<char> strStack;
for (size_t i = 0; i < s.size(); i++)
{
if (s[i] == '(' || s[i] == '[' || s[i] == '{')
strStack.push(s[i]);
else if (s[i] == ')') {
if (strStack.top() != '(')
return false;
strStack.pop();
}
else if (s[i] == ']') {
if (strStack.top() != '[')
return false;
strStack.pop();
}
else if (s[i] == '}') {
if (strStack.top() != '{')
return false;
strStack.pop();
}
}
return strStack.empty();
}
};