题解 | #牛群的秘密通信#
牛群的秘密通信
https://www.nowcoder.com/practice/f0047999594d4cd39f85d7347c6941af
题解 | 牛群的秘密通信
语言: C++
知识点: 栈
分析:
对输入的字符串进行遍历,遍历过程中若当前是左括号则入栈;当前是右括号,则将其与栈顶的左括号进行匹配:若匹配成功,则将匹配过的左括号(当前栈顶元素)出栈;若匹配不成功,则直接返回false
。在遍历过程中遇到当前为右括号而此时栈为空的情况,则表示此右括号无法匹配,直接返回false
。最终遍历完整个字符串后:若此时栈不为空,表示仍有左括号未被匹配,则返回false
;否则即为全部括号都匹配成功,返回true
。
代码实现:
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string字符串
* @return bool布尔型
*/
bool is_valid_cow_communication(string s) {
stack<char> sk; // 使用栈存储左括号
for(int i = 0; i < s.size(); i++)
{
if(s[i] == '(' || s[i] == '[' || s[i] == '{')
{
sk.push(s[i]); // 遇到左括号则入栈
}
else // 遇到右括号
{
char t;
if(!sk.empty())
{
t = sk.top(); // 若栈不空,则将栈顶左括号取出用于匹配
}
else
{
return false; // 若栈空,表示没有与该右括号匹配的左括号,返回false
}
if(s[i] == ')' && t == '(' || s[i] == ']' && t == '[' || s[i] == '}' && t == '{')
{
sk.pop(); // 若左右括号匹配成功,将匹配过的左括号出栈
}
else
{
return false; // 若匹配不成功,返回false
}
}
}
if(!sk.empty())
{
return false; // 若最终遍历完后栈中还有剩余的左括号,也需返回false
}
else
{
return true; // 最终所有条件均满足返回true
}
}
};