题目
假设一个表达式有英文字母(小写)、运算符(+,—,*,/)和左右小(圆)括号构成,以“@”作为表达式的结束符。请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回“YES”;否则返回“NO”。表达式长度小于255,左圆括号少于20个。
题解
传说中是线性数据结构,可是感觉我用的是模拟(捂脸)算了,不管它——、——
统计左括号和右括号的数量,若最后左括号数量比右括号多,很明显就‘NO’了,若统计过程中出现这种情况,也是‘NO’,两种都不是,就‘YES’。
时间复杂度O(255)
代码
var
s:ansistring;
i,l,r:longint;
begin
readln(s);
for i:=1 to length(s) do
begin
if s[i]='(' then inc(l) else
if s[i]=')' then dec(l);
if l<0 then begin writeln('NO');halt;end;
end;
if l>0 then writeln('NO') else
writeln('YES');
end.