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.