[LeetCode] 424. La repetición más larga sustitución de caracteres

Más largo repetir caracteres después de la sustitución. Significado de las preguntas es dar una cadena, solamente letras mayúsculas, lo que le permite reemplazar una de las letras K, hizo la misma operación de sustitución después de la finalización de la carta más larga para devolver la longitud de la subcadena es. Ejemplo,

Ejemplo 1:

Entrada: 
s = "ABAB", k = 2 

de salida: 
4 

Explicación: 
Reemplazar los dos 'A de con dos' vice de B o versa.

Ejemplo 2:

Entrada: 
s = "AABABBA", k = 1 

de la salida: 
4 

Explicación: 
Sustituir el uno 'A' en el medio con 'B' y forma "AABBBBA". 
La subcadena "BBBB" tiene las letras que se repiten más largas, lo cual es 4.

Ideas o ventana deslizante (ventana deslizante). Específicamente, la siguiente

  • Crear un mapa para cada letra y registrar su número de ocurrencias
  • Inicio y el final con dos punteros ventana atascado
  • terminar el primer movimiento, y al mismo tiempo con un máximo variable de encontrar el mayor número de elementos de la situación actual y el número de
  • Si el tamaño de la ventana actual - K> máximo, teniendo en cuenta el tamaño de la ventana reducida - empezar puntero de desplazamiento
  • Después de que el tamaño de la ventana se reduce a menos del máximo, el valor actual de una ventana de grabación, el valor de la longitud es la subcadena más larga repetida

Tiempo de O (n)

Una longitud de la matriz 26 - espacio O (1)

implementación de Java

1  clase Solution {
 2      público  int characterReplacement (String s, int k) {
 3          int [] count = nuevo  int [26 ];
4          int start = 0 ;
5          int res = 0 ;
6          int max = 0 ;
7          para ( int final = 0; final <s.length (); i ++ ) {
 8              recuento [s.charAt (final) - 'A'] ++ ;
9              max = Math.max (max, el recuento de [s.charAt (final) - 'A' ]);
10              //necesidad de camarones inicio - final 
11              si (fin - start + 1 - max> k) {
 12                  recuento [s.charAt (inicio) - 'A'] - ;
13                  comienzan ++ ;
14              }
 15              res = Math.max (res, final - start + 1 );
16          }
 17          de retorno res;
18      }
 19 }

 

implementación de JavaScript

1  / * *
 2  * @param {cadena} s
 3  * @param {número} k
 4  * @return {número}
 5   * / 
6  var characterReplacement = función (s, k) {
 7      permiten COUNT = {};
8      Vamos a empezar = 0 ;
9      vamos max = 0 ;
10      res vamos a = 0 ;
11      para (dejar final = 0; final <s.length; extremo ++ ) {
 12          recuento de [s [final]] = recuento [s [final]] + 1 || 1 ;
13          max = Math.max (max, el recuento de [s [final]]);
14          si (fin - inicio + 1 - max> k) {
 15              recuento [s [Inicio]] - ;
16              comienzan ++ ;
17          }
 18          res = Math.max (res, final - start + 1 );
19      }
 20      de retorno res;
21 };

 

Supongo que te gusta

Origin www.cnblogs.com/aaronliu1991/p/12630114.html
Recomendado
Clasificación