484. Mirando disposición

tema:

Ahora bien, dada una firma secreta sólo por el carácter 'D' y la composición 'I'. 'D' representa la relación entre las dos figuras más abajo, 'I' representa la relación entre los dos números se incrementa. Y la firma secreta es generada por una matriz de enteros específico, la matriz que contiene todos únicamente diferentes de los números 1 a n (la longitud de la firma secreta más 1 es igual a n). Por ejemplo, la firma secreta "DI" puede consistir en una matriz [2.1.3] o [3,1,2] generación, pero no por el array [3,2,4] o [2,1,3,4] generación, porque no son legalmente capaces de representar una cadena en particular "DI" firma secreta.

Ahora su tarea es encontrar el diccionario con la secuencia más pequeño [1, 2, ... n] dispuesto de manera que puede representar la entrada secreta de la firma.

Ejemplo 1:

De entrada: "I"
de salida: [1,2]
Explicación: [1,2] son la única cadena legal puede generar una firma secreta particular, "I", los números 1 y 2 constituyen cada vez más la relación.
 

Ejemplo 2:

Intro: "DI"
de salida: [2,1,3]
Explicación: [2,1,3] y [3,1,2] puede generar una firma secreta "DI",
sino porque estamos buscando la disposición lexicográfico más pequeño, Por lo que necesita para dar salida [2,1,3].
 

nota:

La cadena de salida contendrá el carácter 'D' y 'I'.
La longitud de la cadena de entrada es un número entero positivo y no exceda de 10.000.

 

Respuesta:

Era bastante ingeniosa. Por continua 'I', el orden vigente. Para continuo 'D', esta parte de la matriz para el orden inverso.

Tales como: "DLDDDD":

Al principio es 123456, la primera D: 213,456. Defensa de cuatro D sucesiva: 216.543.

clase de soluciones {
 público : 
    vector < int > findPermutation ( string s) {
         int len = s.size (); 
        vector < int > res (LEN + 1 );
        para ( int i = 0 ; i <len + 1 ; ++ i) { 
            res [i] = i + 1 ; 
        } 
        Int i = 0 ;
        mientras que (i < len) {
             si (s [i] == ' D ') {
                 Int p = i;
                mientras (s [i] == ' D ' y i < len) {
                     ++ i; 
                } 
                Inversa (res.begin () + p, res.begin () + i + 1 ); 
            }
             ++ i; 
        } 
        Devolver res; 
    } 
};

 

Supongo que te gusta

Origin www.cnblogs.com/FdWzy/p/12623297.html
Recomendado
Clasificación