一道关于“括号配对问题”的C++编程题 没看懂答案(涉及到容器)

2025-04-06 18:14:54
推荐回答(1个)
回答1:

这样的匹配是用了栈的思想。

if( vec.back()-1 == *(vec.end()-2) || vec.back()-2 == *(vec.end()-2)){
    vec.pop_back();
    vec.pop_back();
}

查一下ASCII码的表,你会发现

  1. (和)的码值差1

  2. [和],{和}码值差2

  3. ()与[]{}的值差得很远

vec.back()-1 == *(vec.end()-2是用vec中的最后一个元素值减1和vec中倒数第二个元素比较,如果相等,说明这是(),配对成功,让配对元素出栈,继续检查下面的字符

同理,vec.back()-2 == *(vec.end()-2)是用vec中的最后一个元素值减2和vec中倒数第二个元素比较,如果相等,说明这是[]或{},配对成功,让配对元素出栈,继续检查下面的字符