Categorías
Algorithms

LeetCode – Validación UTF-8 (Java)

Un carácter en UTF8 puede tener de 1 a 4 bytes de longitud, sujeto a las siguientes reglas:

Para el carácter de 1 byte, el primer bit es un 0, seguido de su código Unicode.
Para el carácter de n bytes, los primeros n bits son todos uno, el bit n + 1 es 0, seguido de n-1 bytes, siendo los 2 bits más significativos 10.
Así es como funcionaría la codificación UTF-8:

   Char. number range  |        UTF-8 octet sequence
      (hexadecimal)    |              (binary)
   --------------------+---------------------------------------------
   0000 0000-0000 007F | 0xxxxxxx
   0000 0080-0000 07FF | 110xxxxx 10xxxxxx
   0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
   0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

Dada una matriz de números enteros que representan los datos, devuelve si se trata de una codificación utf-8 válida.

Solución Java

public boolean validUtf8(int[] data) {
    int i=0;
    int count=0;
    while(i<data.length){
        int v = data[i];
        if(count==0){
            if((v&240)==240 && (v&248)==240){
                count=3;
            }else if(((v&224)==224) && (v&240)==224){
                count=2;
            }else if((v&192)==192 && (v&224)==192){
                count=1;
            }else if((v|127)==127){
                count=0;
            }else{
                return false;
            }
        }else{
            if((v&128)==128 && (v&192)==128){
                count--;
            }else{
                return false;
            }
        }
 
        i++;
    }
 
    return count==0;
}
  LeetCode - Rutas únicas II (Java)

Por Programación.Click

Más de 20 años programando en diferentes lenguajes de programación. Apasionado del code clean y el terminar lo que se empieza. ¿Programamos de verdad?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *