// C语言刷题确实好难受啊
bool isValid(char * s){
int len = strlen(s);
if (len % 2 != 0)
{
return false;
}
char *stack = malloc(sizeof(char) * len);
int count = 0;
for (int i=0; i<len; i++)
{
if (s[i] == '('){
stack[count++] = ')';
}else if (s[i] == '{'){
stack[count++] = '}';
}else if (s[i] == '['){
stack[count++] = ']';
}else if (count == 0 || stack[count - 1] != s[i]){
return false;
}else {
count--;
}
}
return !count;
}
判断数组中前一个元素是否和之前的元素相同
char * removeDuplicates(char * s){
int n = strlen(s);
char* stack = malloc(sizeof(char) * (n + 1));
int count = 0;
for (int i=0; i<n; i++)
{
if (count > 0 && stack[count - 1] == s[i])
{
count--;
}else {
stack[count++] = s[i];
}
}
stack[count] = '\0';
return stack;
}
即后缀表达式
int evalRPN(char ** tokens, int tokensSize){
int* stack = (int *)malloc(sizeof(int) * tokensSize);
int stackTop = 0;
for (int i=0; i<tokensSize; i++)
{
char* token = tokens[i];
if (strlen(token) > 1 || (token[0] >= '0' && token[0] <= '9'))
{
stack[stackTop++] = atoi(token);
}else {
int num2 = stack[--stackTop];
int num1 = stack[--stackTop];
switch (token[0]){
case '+':
stack[stackTop++] = num1 + num2;
break;
case '-':
stack[stackTop++] = num1 - num2;
break;
case '*':
stack[stackTop++] = num1 * num2;
break;
case '/':
stack[stackTop++] = num1 / num2;
break;
}
}
}
return stack[stackTop - 1];
}