20. 有效的括号
//总共只有三种不匹配的情况:
//字符串扫描完 ,栈内仍剩余一个括号
//括号不匹配
//字符串扫描到一个右括号但栈已空
//遇到一个左括号则将相应类型的一个右括号压栈(方便后续匹配)
bool isValid(char* s) {
int my_stack[10000]={'\0'};
int top=0;
if(strlen(s)%2!=0) return false;//剪枝(第一种情况)
for(int j=0;j
1047. 删除字符串中的所有相邻重复项
//用一个栈,类似括号匹配过程
char* removeDuplicates(char* s) {
int my_stack[200000] = {'\0'};
int top = 0;
//printf(" strlen=%d ", strlen(s));
for (int i = 0; i < strlen(s); i++) {//进行匹配
// printf(" strlen=%d i=%d top=%d ",strlen(s),i,top);
if (top == 0 || my_stack[top - 1] != s[i])//栈为空或与栈顶元素不匹配则直接入栈
my_stack[top++] = s[i];
else {//与栈顶元素匹配则直接进行弹栈(不用压栈)
top--;
}
}
//printf(" strlen=%d ", strlen(s));
// printf("\n");
int j = 0;
while (j < top) {
s[j] = my_stack[j];//从栈底开始遍历,不然字符串是反的
j++;
}
s[j] = '\0';
return s;
}
150. 逆波兰表达式求值
int evalRPN(char** tokens, int tokensSize) {
int my_stack[15000]={0};
int top=0;
//printf("tokensSize=%d\n",tokensSize);
for(int i=0;i