给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public:
bool isValid(string s) {
int a = s.size();
if (a % 2==1)
return false;
unordered_map<char,char> pairs{
{')','('},
{']','['},
{'}','{'},
};
stack<char> stk;
for (char ch:s){
if(pairs.count(ch)){
if(stk.empty() || stk.top() != pairs[ch])
return false;
stk.pop();
}
else{
stk.push(ch);
}
}
return stk.empty();
}
};
答案中不会的知识点:
1: 需要引入的头文件不同
map: #include < map >
unordered_map: #include < unordered_map >
2:内部实现机理不同
map: map内部实现了一个红黑树(红黑树是非严格平衡二叉搜索树,而AVL是严格平衡二叉搜索树),
红黑树具有自动排序的功能,因此map内部的所有元素都是有序的,红黑树的每一个节点都代表着map的一
个元素。因此,对于map进行的查找,删除,添加等一系列的操作都相当于是对红黑树进行的操作。
map中的元素是按照二叉搜索树(又名二叉查找树、二叉排序树,特点就是左子树上所有节点的键值
都小于根节点的键值,右子树所有节点的键值都大于根节点的键值)存储的,使用中序遍历可将键值
按照从小到大遍历出来。
unordered_map: unordered_map内部实现了一个哈希表(也叫散列表,通过把关键码值映
射到Hash表中一个位置来访问记录,查找的时间复杂度可达到O(1),其在海量数据处理中有着
广泛应用)。因此,其元素的排列顺序是无序的。
适用处:对于那些有顺序要求的问题,用map会更高效一些
适用处:对于查找问题,unordered_map会更加高效一些,因此遇到查找问题,常会考虑一下用unordered_map
unordered_map<int, string> myMap={{ 5, "张大" },{ 6, "李五" }};//使用{}赋值
myMap[2] = "李四"; //使用[ ]进行单个插入,若已存在键值2,则赋值修改,若无则插入。
myMap.insert(pair<int, string>(3, "陈二"));//使用insert和pair插入
stack<char> stk;
stack<int> st;
st.push(i);//入栈
st.pop();//弹出栈顶元素
st.top();// 获得栈顶元素
empty()
//可以检测stack内是否为空,返回true为空,返回false为非空
size()
//返回stack内元素的个数
转自 https://blog.csdn.net/qq_21997625/article/details/84672775