为什么检测括号表示要用栈呢??

wzuxian2012 2012-06-23 12:16:40
(a,b))


对于这个表达式,只有圆括号,非法性,一个左括号和右括号的数目相同,并且括号前面必须有数字,

我认为就合法了,

boolIsValid(int arr[], int len)
{

int npos;

int leftBrackets, rightBrackets;

leftBrackets=rightBrackets=0;

for(nPos=0; nPos<len; nPos++)
{

if(arr[nPos]=='(')
{
leftBrackets++;
if(nPos<len && arr[nPos+1]不是数字)
return false;
}


if(arr[nPos]==')')
{
rightBrackets++;
if(nPos<len && arr[nPos+1]不是数字)
return false;
}



}


if(leftBrackets!=rightBr...)
return false;

return true;


}



这个算法如何,有漏洞吗???


...全文
227 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
竞天问 2012-06-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

这个东西你的确想得很深,如果你想问是怎么来的,建议你去看看编译原理相关的东西。里面会讲得很详细。
[/Quote]
你会吓着他的
skillart 2012-06-27
  • 打赏
  • 举报
回复
逆波兰顺序
tengerye 2012-06-27
  • 打赏
  • 举报
回复
这个东西你的确想得很深,如果你想问是怎么来的,建议你去看看编译原理相关的东西。里面会讲得很详细。
RiqueZhang 2012-06-25
  • 打赏
  • 举报
回复
从左向右,第一个")"一定是和它之前的最后一个"("匹配,所以每遇到一个")",就一定可以从栈顶取出一个"("与其匹配,且遍历结束后栈为空,否则就不合法

[Quote=引用 3 楼 的回复:]

ls 2位

请教

为什么你们遇到这种问题就会想到用栈来求解
栈的特征;first in last out


你们说说 对于括号检测的题目, 什么地方符合first in last out的特征呢??
[/Quote]
wzuxian2012 2012-06-23
  • 打赏
  • 举报
回复
ls 2位

请教

为什么你们遇到这种问题就会想到用栈来求解
栈的特征;first in last out


你们说说 对于括号检测的题目, 什么地方符合first in last out的特征呢??

丈八涯 2012-06-23
  • 打赏
  • 举报
回复
入栈的操作数大于等于出栈的操作数 等价于 左括号数大于等于右括号数
转换为数学问题的话,就是卡特兰数
FancyMouse 2012-06-23
  • 打赏
  • 举报
回复
1+1)+1+(1+1

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧