题目:
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.
判断字符串中的括号是不是匹配的。
直觉告诉我应该要用到栈~
思路:遍历字符,若碰到左括号就将“左括号对应的右括号”入栈;若碰到右括号,先对栈判空,若空返回false,然后判断该值与栈的top是否相等,若不相等返回false。循环结束之后若栈空返回true,否则返回false。
代码如下:
bool isValid(string s) {
map<char,char> map_s={{'(',')'},{'[',']'},{'{','}'}};
stack<char> temp;
for(int i=0;i<s.length();++i){
if(map_s.find(s[i])!=map_s.end()) //若是左括号
temp.push(map_s[s[i]]); //将s[i]在map中的值,放到栈中
else{
if(temp.empty())
return false;
if(s[i]==temp.top()) //若相等
temp.pop();
else
return false;
}
}
if(temp.empty())
return true;
else
return false;
}
小得,关于C++中栈stack的使用:stack temp;
栈常用的函数:1,temp.empty():判空,若空返回true。2,temp.top():输出栈顶元素;3,temp.pop():出栈;4,temp.push():进栈。
map:map_s.find(s[i])!=map_s.end() 判断map中是否含有有个元素。