Given a string containing just the characters ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[’ and ‘]’, determine if the input string is valid.
The brackets must close in the correct order, “()” and “()[]{}” are all valid but “(]” and “([)]” are not.
利用栈的push和pop过程,将”(“,”{“,”[“将所有括号左边部分push入栈,当出现”)”,”}”,”]”右半边的括号时与栈顶元素进行匹配(是否是一对)若是则pop栈顶元素,并进行下一位的匹配;若不同则直接返回false。
class Solution {
public:
bool isValid(string s) {
stack<int> No1stack;
size_t chair = 0;
int n = s.size();
while (chair < n) {
if ((s[chair] == '{') || (s[chair] == '[') || (s[chair] == '('))
No1stack.push(s[chair]);
else {
if (No1stack.size() == 0)
return false;
char top = No1stack.top();
switch (s[chair]) {
case '}':
if (top == '{')
No1stack.pop();
else
return false;
break;
case ']':
if (top == '[')
No1stack.pop();
else
return false;
break;
case ')':
if (top == '(')
No1stack.pop();
else
return false;
break;
}
}
chair++;
}
if (No1stack.size() == 0)
return true;
else
return false;
}
};ring,它是原始string的一部分或全部的拷贝。
class Solution {
public:
bool isValid(string s) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int len = s.length();
if(len==0) return true;
if(len%2) return false;
for(int i = 1; i < len; i++)
if(s[i-1] == ‘{’ && s[i]==’}’)
{
string ss = s.substr(0, i-1) + s.substr(i+1);
return isValid(ss);
}
else if(s[i-1] == ‘[’ && s[i]==’]’)
{
string ss = s.substr(0, i-1) + s.substr(i+1);
return isValid(ss);
}
else if(s[i-1] == ‘(’ && s[i]==’)’)
{
string ss = s.substr(0, i-1) + s.substr(i+1);
return isValid(ss);
}
return false;
}
};
“`