一、题目描述
二、思路
跟代码随想录中略有不同:
三、解题过程
-
定义栈
typedef struct myStack{
int top;
char data[5000];
}stack;
-
实现初始化栈接口函数
stack* createStack(){
stack* s = (stack*)malloc(sizeof(stack));
s -> top = 0;
return s;
}
-
进入循环遍历字符串进行判断
bool isValid(char * s){
stack* content = createStack();
int sLen = strlen(s);
int top = content -> top;
for(int i = 0; i < sLen; i++){
if(s[i] == '(' || s[i] == '[' || s[i] == '{'){
content -> data[top++] = s[i];
}else{
switch(s[i]){
case ')':
if(content -> data[top - 1] == '('){
top--;
break;
}else return false;
case ']':
if(content -> data[top - 1] == '['){
top--;
break;
}else return false;
case '}':
if(content -> data[top - 1] == '{'){
top--;
break;
}else return false;
}
}
}
return !top;
}
四、代码
typedef struct myStack{
int top;
char data[5000];
}stack;
stack* createStack(){
stack* s = (stack*)malloc(sizeof(stack));
s -> top = 0;
return s;
}
bool isValid(char * s){
stack* content = createStack();
int sLen = strlen(s);
int top = content -> top;
for(int i = 0; i < sLen; i++){
if(s[i] == '(' || s[i] == '[' || s[i] == '{'){
content -> data[top++] = s[i];
}else{
switch(s[i]){
case ')':
if(content -> data[top - 1] == '('){
top--;
break;
}else return false;
case ']':
if(content -> data[top - 1] == '['){
top--;
break;
}else return false;
case '}':
if(content -> data[top - 1] == '{'){
top--;
break;
}else return false;
}
}
}
return !top;
}
时间复杂度:O(n)。