有效的括号
题目描述:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
- 有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 注意空字符串可被认为是有效字符串。
示例 1: 输入: “()” 输出: true
示例 2: 输入: “()[]{}” 输出: true
示例 3: 输入: “(]” 输出: false
示例 4: 输入: “([)]” 输出: false
示例 5: 输入: “{[]}” 输出: true
题解思路:此题很容易就想到采用栈来解决,只要遇到左括号就入栈,遇到右括号,就出栈比较是否匹配,如果不匹配则返回false。
注意:
- 空字符串的判定是
s[0]==' '
,我第一次设置为了s[0]=='\0'
- 如果遍历完了,栈还没空,就说明左括号多了,或者是还没遍历完,栈就空了,说明右括号多了,都是返回false
bool isValid(char * s){
char stack[10000];
int index_s,index_stack;
index_s=index_stack=0;
if(s[0]==' '){
return false;
}
while(s[index_s]!='\0'){
if(s[index_s]=='('||s[index_s]=='['||s[index_s]=='{'){
index_stack++;
stack[index_stack]=s[index_s];
}
else{
if(index_stack==0){
return false;
}
else{
if(stack[index_stack]=='('&&s[index_s]!=')'){
return false;
}
if(stack[index_stack]=='['&&s[index_s]!=']'){
return false;
}
if(stack[index_stack]=='{'&&s[index_s]!='}'){
return false;
}
index_stack--;
}
}
index_s++;
}
if(index_stack!=0){
return false;
}
return true;
}