|| 法一:用栈
class Solution {
public:
bool isValid(string s) {
if(s.length()%2!=0) return false;//一但是奇数说明不是有效的括号
map<char,char> wordbook;//建立哈希表
wordbook.insert(map<char,char>::value_type(')','('));
wordbook.insert(map<char,char>::value_type(']','['));
wordbook.insert(map<char,char>::value_type('}','{'));
stack<char> mystack;//建立栈
for(int i=0;i<s.length();i++)
{
if(s[i]=='['||s[i]=='{'||s[i]=='(')//匹配到左括号
mystack.push(s[i]);//放入栈中
else if(s[i]==']'||s[i]=='}'||s[i]==')')//匹配到右括号
{
if(mystack.empty()) return false;
//匹配到右括号,栈中应该存在左括号。否则就是无效的括号
if(wordbook[s[i]]==mystack.top())//与栈顶元素进行匹配
{
mystack.pop();//匹配成功删除栈顶元素
continue;
}
else return false;
}
}
if(mystack.empty()) return true;//有效的括号到最后检测结束栈中应没有元素
else return false;
}
};
执行结果:
|| 文末总结:
-
字符串的长度:
str. length()
数组的大小:arr. size()
-
c++中栈的相关操作
创建栈:stack <int> mystack
弹出:mystack.pop();
压入:mystack.push();
判空:mystack.empty();
-
哈希表的插入数据的两种方法:
- 第一种:用insert函数插入value_type数据
插入以后,一个key与唯一一个value配对,不可更改
map<char,char> wordbook;//建立哈希表
wordbook.insert(map<char,char>::value_type(')','('));
wordbook.insert(map<char,char>::value_type(']','['));
wordbook.insert(map<char,char>::value_type('}','{'));
- 第二种:用数组方式插入数据,value可以修改
map<char, char> workbook;
workbook[')']='(';
workbook[']'] = '[';
workbook['}'] ='{';