代码
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string字符串
* @return bool布尔型
*/
#include<string.h>
struct stack {
int size;
int top;
char data[10001];
} stack;
void init(struct stack* sk) {
sk->top = 0;
sk->size = 0;
}
void push(struct stack* sk, char a) {
sk->data[sk->top] = a;
sk->size ++;
sk->top ++;
}
char top(struct stack* sk) {
return sk->data[sk->top - 1];
}
char pop(struct stack* sk) {
sk->size --;
sk->top --;
return sk->data[sk->top];
}
bool isValid(char* s ) {
int len = strlen(s);
printf("len:%d\n", len);
int point = 0;
struct stack sk;
init(&sk);
for (int i = 0; i < len; i ++) {
printf("round %d\n", i);
switch(s[i]){
case '(':
case '[':
case '{':
push(&sk, s[i]);
printf("push %c\n", s[i]);
break;
case ')':
if(sk.size == 0 || top(&sk) != '('){
return false;
}
pop(&sk);
printf("pop %c\n", s[i]);
break;
case ']':
if(sk.size == 0 || top(&sk) != '['){
printf("sk.size %d top %c\n", sk.size, top(&sk));
return false;
}
printf("pop %c\n", s[i]);
pop(&sk);
break;
case '}':
if(sk.size == 0 || top(&sk) != '{'){
return false;
}
printf("pop %c\n", s[i]);
pop(&sk);
break;
default:
printf("unexpected\n");
break;
}
}
if (sk.size != 0) {
return false;
}
return true;
}
思路
遍历字符数组,如果是 '(' / '[' / '{',就压入栈中,如果是 ')' / ']' / '}',若判断栈为空 / 栈顶不是对应的符号,返回false
遍历结束后,若栈为空,返回true,否则返回false
复习知识点
- C中用char*表示字符串,string库提供了一系列操作字符串的函数
字符串的比较:strcmp
字符串的长度:strlen
- printf打印单个字符:%c
总结
思路很简单,就是一些很基础的知识忘记了,