一道关于顺序栈的笔试题:判断一个包含'('和')'的字符串是否有效
若有一个包括 '(' 和 ')' 的字符串string ,判断字符串是否有效。要求设计算法实现检查字符串是否有效,有效的字符串需满足以下条件:
A.左括号必须用相同类型的右括号闭合。
B.左括号必须以正确的顺序闭合。
C.每个右括号都有一个对应的相同类型的左括号。
思路图:
参考代码:
bool SeqStack_IsStringVaild(SeqStack_t *Manager, const char *Str)
{
char *Pstr = Str; // 备份地址,防止地址丢失
// 1.循环遍历字符串,寻找'('
while (*Pstr)
{
// 判断当前地址下的字符是否为'(',如果是则入栈
if (*Pstr == '(')
{
SeqStack_Push(Manager, '(');
}
if (*Pstr == ')')
{
// 判断空栈
if (SeqStack_IsEmpty(Manager))
{
return false;
}
SeqStack_Pop(Manager);
}
Pstr++;
}
// 2.判断栈是否为空
if (!SeqStack_IsEmpty(Manager))
{
return false;
}
return true;
}