20. 有效的括号
程序员文章站
2022-06-24 16:31:09
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:①左括号必须用相同类型的右括号闭合。②左括号必须以正确的顺序闭合。③注意空字符串可被认为是有效字符串。解题思路 ❤方法为:栈存左括号① 奇数可以直接判断为错误;② 别忘了边界情况,第一个就为有右括号;③ 以及!!java自带栈功能,别忘了!!④ (以及,不要忘记c怎么求数组长度了…strlen(s)… )JAVA代码(白痴写法)class Solution {...
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
①左括号必须用相同类型的右括号闭合。
②左括号必须以正确的顺序闭合。
③注意空字符串可被认为是有效字符串。
解题思路 ❤
方法为:栈存左括号
① 奇数可以直接判断为错误;
② 别忘了边界情况,第一个就为有右括号;
③ 以及!!java自带栈功能,别忘了!!
④ (以及,不要忘记c怎么求数组长度了…strlen(s)… )
JAVA代码(白痴写法)
class Solution {
public boolean isValid(String s) {
if(s.length() % 2 != 0) return false;
char stack[] = new char[100000];
int top = -1;
for (int i=0 ; i<s.length() ; i++){
char c = s.charAt(i);
if(c=='(' || c=='{' || c=='[')
stack[++top] = c;
else {
if(top==-1) return false; // 这句边界情况不能忘!!!
if(c==')'){
if(stack[top]=='(')top--;
else return false;
}
if(c=='}'){
if(stack[top]=='{')top--;
else return false;
}
if(c==']'){
if(stack[top]=='[')top--;
else return false;
}
}
}
if(top==-1) return true;
else return false;
}
}
JAVA代码(自带stack写法)
class Solution {
public boolean isValid(String s) {
if(s.length() % 2 != 0) return false;
Stack<Character> stack = new Stack<>(); // 现成的栈
for (int i=0 ; i<s.length() ; i++){
char c = s.charAt(i);
if(c=='(' || c=='{' || c=='[')
stack.push(c);
else {
if(stack.empty()) return false;
char peek = stack.peek();
if((c==')' && peek=='(') || (c=='}' && peek=='{') || (c==']' && peek=='['))
stack.pop(); // 写到一堆
else return false;
}
}
return stack.empty();
}
}
C代码(白痴写法)
bool isValid(char * s){
if(strlen(s) % 2 != 0) return false; // 忘记怎么求长度了......
char stack[100000];
int top=-1;
for( int i=0 ; i<strlen(s); i++){
char c = s[i];
if(c=='(' || c=='[' || c=='{') stack[++top] = c;
else {
if(top==-1) return false;
char tmp = stack[top];
if((c==')' && tmp=='(') || (c=='}' && tmp=='{') || (c==']' && tmp=='['))
top--;
else return false;
}
}
return top==-1;
}
本文地址:https://blog.csdn.net/StickTo_IT/article/details/107290484