Nidificação profundidade parênteses eficazes

Corda define uma suportes válido: para cada um de um parêntesis esquerda, direita parêntesis a ela correspondente pode ser encontrada, e vice-versa. Para mais detalhes, consulte a secção "string eficaz suportes" do final do título.

Nidificação profundidade profundidade definido: ou seja, a corda efectiva parênteses profundidade de sobreposição, a profundidade (A) representa a profundidade eficaz da cadeia Um assentamento de suportes. Para mais detalhes, consulte o final do título "nidificação profundidade" seção.

método de cálculo profundidade de sobreposição é eficaz com um suporte de tipo de cadeia correspondente mostrado abaixo:

1. cadeia vazia tipo 2.AB 3. (A) Tipo
"" (()) () ( (()) () )
profundidade = 0 profundidade = max (2,1) = 2 profundidade = 1 + profundidade (A) = 3

 

Para lhe dar um "válido seqüência de parênteses" seq, você dividi-lo em dois suportes disjuntos cadeias válidas, A e B, e a profundidade mínima dos dois strings.

Disjuntos: Cada seq [i] só pode ser dado a ambos A e B a, A não pode ambos pertencem a B pertence.
A B os elementos na cadeia original ou podem não ser contínuos.
A.length + B.length = seq.length
profundidade mínima: máx (profundidade (A), a profundidade (B)) é o menor valor possível. 
Esquema de particionamento com um comprimento de matriz resposta resposta seq.length, as referidas regras de codificação são como se segue:

resposta [i] = 0, seq [i] aponta para A.
resposta [i] = 1, SEQ [i] aponta para B.
Se houver mais do que atender os requisitos da resposta, basta devolver qualquer dos quais pode ser.

 

Exemplo 1:

Entrada: SEQ = "(() ( ))"
Saída: [0,1,1,1,1,0]
Exemplo 2:

Entrada: seq = "() (( )) ()"
Output: [0,0,0,1,1,0,1,1]
Interpretação: Este exemplo não é a única resposta.
Clique para a saída A = "() ()" , B = "() ()", max (profundidade (A), a profundidade (B)) = 1, a profundidade mínima da mesma.
Como [1,1,1,0,0,1,1,1], o resultado é correcta, em que A = "() () ( )", B = "()", max (profundidade (A), a profundidade (B)) = 1.
 

dicas:

1 <seq.size <= 10000
 

corda eficaz parênteses:

Apenas por "(" e ")" cadeia de caracteres composta por, para cada um dos parêntesis esquerda, direita parêntesis a ela correspondente pode ser encontrada, e vice-versa.
As situações a seguir pertence igualmente a um parêntesis cordas válidos:

1. vazio cadeia
2 está ligada, pode ser escrita como AB (A está ligado a B), em que A e B são válidas suportes corda
3. assentamento, pode ser escrita como (A), em que A é um suportes de cadeia válidos
equipados conjuntos de profundidade:

Da mesma forma, podemos definir a profundidade eficaz de nidificação profundidade suportes string s (S):

1. s está vazio, a profundidade ( "") = 0
quando B 2. s está ligado a A, a profundidade (A + B) = max (profundidade (A), a profundidade (B)), onde A e B são cadeia eficaz suportes
3. s aninhada caso, a profundidade ( "(" + A + ")") = 1 + profundidade (A), em que A é um suportes de cadeia válidos

Por exemplo: "", "() ()" e "() (() ())" é uma cadeia de caracteres válida entre parênteses, 0,1,2 profundidade do assentamento, respectivamente, enquanto ") (" e "(( ) "não é uma suportes de cordas válidos.

 

 

classe Solution {
 público : 
    vector < int > maxDepthAfterSplit ( seqüência seq) { 
        vector < int > ans;
        int altura = 0 ; 

        para ( int i = 0 ; i <seq.length (); i ++ ) {
             se (SEQ [i] == ' ( ' ) { 
                altura + = 1 ; 
                ans.push_back (altura % 2 ); 
            } 
            else {
                ans.push_back (altura % 2 ); 
                altura - ; 
            } 
        } 

    Retornar ans; 
    } 
};

ideias de resolução de problemas:

Em primeiro lugar, é preciso primeiro pensar em correspondência parênteses pilha, desde parênteses correspondem, de acordo com as características de LIFO pilha, você vê o último parêntese esquerdo é o primeiro jogo no suporte direito saberá.

Em segundo lugar, os suportes de corda dois tipos, um tipo está ligado a um tipo aninhado, olhar para o assunto para saber, irá produzir apenas aninhada comprimento mais profundo de nidificação.

Enquanto o suficiente aberto estrutura aninhada, a chave é como a demolição.

profundidade de sobreposição é calculado como max (profundidade (A), a profundidade (B))

Então você quer mais, então a profundidade máxima seguirá grande. Se e somente se A, pode atingir uma profundidade igual ao valor mínimo de B.

Por isso, tentamos colocar a nested canto compartilhamento de estrutura, em seguida, de acordo com a paridade de pontos ligeiramente

Na verdade, parêntese direito não se incomode, ir com seu par parêntese esquerdo, ele também seguiu o movimento

No interior da pilha, a altura da pilha é exatamente a profundidade da corda entre parênteses

Portanto, a profundidade de um parêntesis esquerda dar estranho A, uma profundidade de um suporte esquerdo para o B-mesmo-like parcial

Observa ainda que, na verdade, só podem ser usados ​​para manter as informações de altura da pilha, para que possamos simplificar a altura da pilha em um registro variável de pilha, mais espaço de compressão.

Acho que você gosta

Origin www.cnblogs.com/olajennings/p/12616934.html
Recomendado
Clasificación