1.12 Blog de aprendizaje

Hoy resumiré dos preguntas sobre apilar entre paréntesis.
Pregunta 1: elimine el corchete más externo
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

有关括号使用有效性或者去除最外层等很容易让我们想到使用栈来解决,
在这道题目中,我们可以借助栈的思想,简化做法,定义一个变量来帮助我们辨别
是否在处理最外层结构。
代码如下:
char * removeOuterParentheses(char * S){
    
    
 int cnt = 0,k = 0;//cnt为0,则处于最外层
    for(int i = 0;i < strlen(S);i++){
    
    
        if(S[i] == '('){
    
    
            if(cnt != 0) S[k++] = S[i];//不在最外层
            cnt ++;//后加
        }
        if(S[i] == ')'){
    
    
            cnt--;//注意这里是先减,去除一对完整的括号
            if(cnt != 0) S[k++] = S[i];//不在最外层
        }
    }
    S[k] = '\0';//别忘了这步!
    return S;
}

Pregunta 2: Adición mínima para que los corchetes sean efectivos
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

这道题目也是,很容易想到使用栈来解决
代码如下:
int minAddToMakeValid(char * S){
    
    
 int len = strlen(S);
    char stack[len + 1];
    int top = -1;//定义栈顶
    for(int i = 0; S[i]!='\0'; ++i){
    
    
        if(top != -1 && stack[top] == '(' && S[i] == ')')//前后一对完整的括号对应,
            top--;
        else//不满足完整括号对应则入栈
            stack[++top] = S[i];
    }
    return top + 1;//输出需要使整个结构括号完整对应的个数
}

Supongo que te gusta

Origin blog.csdn.net/weixin_47529865/article/details/112545067
Recomendado
Clasificación