网站刷流量有用吗,长春新增2个高风险地区,企业网站asp模板,网站建设开发公司定制网站制作只想用一个栈解决#xff0c;可惜一直解决不了#xff0c;因为 * 的问题无法解决
看到标答用了两个栈#xff0c;一个栈存储 ( 另一个栈储存 *
思路#xff1a;当s[k] 为 ( 或 * 进栈 #xff0c; 当s[k] 为 ) 时 #xff0c; 优先左括号出栈#xff08;因为*有…只想用一个栈解决可惜一直解决不了因为 * 的问题无法解决
看到标答用了两个栈一个栈存储 ( 另一个栈储存 *
思路当s[k] 为 ( 或 * 进栈 当s[k] 为 ) 时 优先左括号出栈因为*有可能为空白字符 若左括号为空则*作为(出栈 当s[k]为空时并且左括号的栈也为空则*作为空白字符,直接返回true , 当左括号的栈不为空时则要依次比较栈顶元素的下标并且此时(出现的位置一定要在*的位置前面因为此时要匹配成()
下面的代码写的比较详细
题目链接有效的括号字符串
typedef struct Stack
{ int* arr; int rear; int size;
}ST;
void STInit(ST* obj)
{ obj-arr (int*)malloc(sizeof(int)*105); obj-rear -1; obj-size 0;
}
void STPush(ST* obj,int pos)
{ if( obj-size 0 ) { obj-arr[obj-rear] pos; obj-size; return; } else { obj-arr[obj-rear] pos; obj-size; return ; }
}
bool CheckIsEmpty(ST* obj)
{ return obj-size 0;
}
void StackPop(ST* obj)
{ obj-rear--; obj-size--;
}
int StackTop(ST* obj)
{ return obj-arr[obj-rear];
}
bool checkValidString(char* s) { ST Left_ST; ST Star_ST; STInit(Left_ST);//初始化 STInit(Star_ST); for( int k 0 ; s[k] ! \0 ; k) { if( s[k] ( ) { STPush(Left_ST,k);//左括号进栈 } else if( s[k] * ) { STPush(Star_ST,k);//*进栈 } else { if( !CheckIsEmpty(Left_ST) )//判断左括号的栈是否为空 { StackPop(Left_ST); } else if( !CheckIsEmpty(Star_ST) ) { StackPop(Star_ST); } else return false; } } while( !CheckIsEmpty(Left_ST) !CheckIsEmpty(Star_ST) ) { int pos1 StackTop(Left_ST); StackPop(Left_ST); int pos2 StackTop(Star_ST); StackPop(Star_ST); if( pos1 pos2 )return false;//比较下标 } return CheckIsEmpty(Left_ST);
}