我有这个棘手的问题,我无法解决:
我们有一个包含“{}”或“[]”序列的字符串,我想编写一个检查字符串是否有效的函数或方法:它应该返回true:
或者如果E和F是有效表达式的连接,结果也是有效的。
"[{}]" // valid
"{[}]" // invalid
"{{[[]]}}" // valid
"{{[[]]}}{{[[]]}}" // valid
我尝试通过char扫描字符串char来解决这个问题,我没有找到合适的算法然后我想到了regex_match,最后我告诉自己这种问题应该用状态机来解决(像EBNF)。
你能做些什么来解决这个问题?
答案 0 :(得分:0)
C ++中的简单答案
static bool check(const string& sequence)
{
if (sequence.empty())
return true;
std::stack<char> stack;
for (size_t i = 0; i < sequence.length(); ++i)
{
const char current = sequence.at(i);
if (current == '{' || current == '[')
stack.push(current);
if (current == '}' || current == ']')
{
if (stack.empty())
return false;
char last = stack.top();
if (current == '}' && last == '{' || current == ']' && last == '[')
stack.pop();
else
return false;
}
}
return stack.empty();
}