1. Tema
Soporte solamente por cadena válida "("
y ")"
configurado, y de acuerdo con una de varias de las siguientes condiciones:
- cadena nula
- La conexión puede ser referido como AB (A y B están conectados), en donde A y B son soportes de cadena válida
- Anidación, se puede escribir como (A), donde A es una cadena válida soportes
Del mismo modo, podemos definir la profundidad efectiva de anidación profundidad soportes de cadena s (S):
- s es vacía,
depth("") = 0
- Cuando está conectado a s A y B,
depth(A + B) = max(depth(A), depth(B))
donde A y B son los soportes de cadena válida - s es anidado de casos
depth("(" + A + ")") = 1 + depth(A)
en los que A es un válido soportes de cadena
ejemplo:"","()()",和 "()(()())"
son soportes de cadena válida, respectivamente, 0,1,2 profundidad de anidamiento, y")(" 和 "(()"
no es eficaz en cadena paréntesis.
Para darle una SEC soporte de cadena válida, dividiéndolo en dos sub-secuencias disjuntos A y B, y A y B Satisfacer los soportes definen una cadena de caracteres válidos (nota: a.length + B.length = seq.length).
Ahora, usted tiene que elegir el arbitrario conjunto de cadenas válidas soportes A y B, hacen max(depth(A), depth(B))
posible el valor del mínimo .
Devuelve la longitud de seq.length
la matriz de respuesta answer
, selecciona una o B regla de codificación es: si SEQ [i] es la parte A, entonces la respuesta [i] = 0. De lo contrario, la respuesta [i] = 1.
Incluso si hay varias respuestas existen para cumplir con los requisitos, también es necesario un cambio.
示例 1:
输入:seq = "(()())"
输出:[0,1,1,1,1,0]
示例 2:
输入:seq = "()(())()"
输出:[0,0,0,1,1,0,1,1]
提示:
1 <= text.size <= 10000
Fuente: Botón de estancia (LeetCode)
enlace: https: //leetcode-cn.com/problems/maximum-nesting-depth-of-two-valid-parentheses-strings
con derechos de autor por deducción de todas las redes. reimpresión comercial póngase en contacto con la reimpresión autorizada oficial, no comercial por favor indique la fuente.
2. Resolución de Problemas
- Título media, tanto como sea posible para que un mínimo de dos soportes abiertos máxima profundidad de anidamiento
- Entonces, de acuerdo a la profundidad en las capas impares, las capas pares, respectivamente, en la línea
class Solution {
public:
vector<int> maxDepthAfterSplit(string seq) {
int i, j = 0, depth = 0;
vector<int> ans(seq.size(),0);
char prev = '*';
for(i = 0; i < seq.size(); ++i,++j)
{
if(prev == ')')
depth--;
if(seq[i] == '(')
depth++;
if(depth & 1)//奇数层
ans[j] = 1;
prev = seq[i];
// cout << depth << " ";
}
return ans;
}
};