有大佬帮忙看一下这道题目吗?

weixin_45906870 2020-08-14 10:18:31
有效的括号
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。

示例 1:

输入: "()"
输出: true
示例 2:

输入: "()[]{}"
输出: true
示例 3:

输入: "(]"
输出: false
示例 4:

输入: "([)]"
输出: false
示例 5:

输入: "{[]}"
输出: true

代码如下:
bool isValid(char * s){
int len = strlen(s);
char stack[len+1]; //这里为什么要加1?我感觉根本用不着啊
int top=-1;
for (int i=0; i<len; i++){
if (s[i]=='(') stack[++top] = ')';
else if (s[i]=='[') stack[++top] = ']';
else if (s[i]=='{') stack[++top] = '}';
else if (top==-1 || s[i]!=stack[top]) return false;
else top--;
}
return (top==-1);
}
...全文
132 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
壶中日月小 2020-08-15
  • 打赏
  • 举报
回复
c语言不支持变量定义数组大小,所以不管加不加1都会报错,
不过这个问题不在这,能看出这里编译器支持用变量定义数组长度,
问题出在为什么要加1,因为有可能出现空字符串,此时len=0,而数组大小必须大于零
棉猴 2020-08-15
  • 打赏
  • 举报
回复
像这种动态分配数组,最好用malloc
chxchxkkk 2020-08-15
  • 打赏
  • 举报
回复
+1是因此字符串里要有'\0'的位置
qybao 2020-08-15
  • 打赏
  • 举报
回复
不用加1也可以 不加1编译出错是因为你的编译器不支持用变量来定义数组长度,所以你要自己动态申请内存。 即 char *stack = new char[len];
zlei_csdn 2020-08-15
  • 打赏
  • 举报
回复
不用加1,也可以通过编译的呀!
weixin_45906870 2020-08-14
  • 打赏
  • 举报
回复
但是不加1,编译会出错
Italink 2020-08-14
  • 打赏
  • 举报
回复
确实不用,top在[-1,len)变化

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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