问题描述:
问题分析:
1.如果传入的字符串长度为0,直接判断结果为真;
2.(),{},[]三对括号的ASCII十进制数值为40,41, 123,125, 91,93,可以依据数字关系简化判断代码;
3.如果没有前缀代码只有后面的括号,可以直接判错;
4.原始代码遍历结束,栈操作结束;
5.本文使用字符串操作实现了栈功能;
完整代码:
bool isValid(string s) {
if (s.size() == 0)
return true;
int i = 1;
string t = s.substr(0, 1);
while (true)
{
//获取字符串末端元素(栈顶元素)
char c = t[t.size() - 1];
if (s[i] == c + 1 || s[i] == c + 2)
t = t.substr(0, t.size() - 1);//删除末端元素模仿出栈
else if (s[i] == ')' || s[i] == ']' || s[i] == '}')
return false;
else
t = t + s[i];//增加末端元素模仿入栈
i++;
if (i >= s.size())
break;
}
if (t.size() == 0)
return true;
else
return false;
}
结果展示: