在这道题目中需要判断一个只包含括号的字符串是否有效。一个有效的字符串需要满足:
括号类型包括:
() 和 )[ 和 ]{ 和 }使用 栈 数据结构。栈的特性是 后进先出(LIFO)。
初始化数据结构:我们需要一个栈来存放未匹配的左括号,同时用一个哈希表来存储右括号与左括号的对应关系。
遍历字符串:
(, {, [),将其压入栈中。), }, ]),检查栈顶是否有相应类型的左括号匹配: 最终检查:遍历结束后,如果栈为空,则所有左括号都有相应的右括号匹配,字符串有效;否则,字符串无效。
#include #include #include using namespace std; class Solution { public: bool isValid(string s) { // 哈希表用于存储右括号与左括号的对应关系 unordered_map bracket_map = { {')', '('}, {'}', '{'}, {']', '['} }; // 栈用于存储未匹配的左括号 stack stack; for (char ch : s) { if (bracket_map.count(ch)) { // 如果当前字符是右括号 if (!stack.empty() && stack.top() == bracket_map[ch]) { stack.pop(); // 配对成功,弹出栈顶的左括号 } else { return false; // 配对失败 } } else { // 当前字符是左括号,压入栈中 stack.push(ch); } } // 栈为空说明所有左括号都有匹配的右括号 return stack.empty(); } }; int main() { Solution solution; string s; cin >> s; if (solution.isValid(s)) { cout << "True" << endl; } else { cout << "False" << endl; } return 0; } 哈希表(unordered_map):
栈(stack):
false。遍历字符串:
最终判断:
false。该算法的时间复杂度是 O(n),空间复杂度也是 O(n),其中 n 是输入字符串的长度。
上一篇:荣耀v8要不要升级系统
下一篇:安卓升级系统后速度变慢了