leetcode 1805. El número de enteros diferentes en una cadena (idea de máquina de estados)

1805. Número de enteros distintos en una cadena

Simple

55

negocio relacionado

Se le proporciona una cadena  word que consta de números y letras minúsculas en inglés.

Reemplace cada carácter que no sea un número con un espacio. Por ejemplo, "a123bc34d8ef34" se convertirá en  " 123  34 8  34" . Tenga en cuenta que los números enteros restantes son (separados por al menos un espacio): "123",  y   ."34""8""34"

Devuelve  el número de  enteros distintosword  formados después de que el par completa la sustitución  .

 Dos números enteros se consideran diferentes sólo si sus  representaciones decimales sin ceros a la izquierda difieren.

Ejemplo 1:

Entrada: palabra = "a 123 bc 34 d 8 ef 34 "
 Salida: 3
 Explicación: Diferentes enteros son "123", "34" y "8". Tenga en cuenta que "34" sólo cuenta una vez.

Ejemplo 2:

Entrada: palabra = "leet 1234 código 234 "
 Salida: 2

Ejemplo 3:

Entrada: palabra = "a 1 b 01 c 001 "
 Salida: 1
 Explicación: "1", "01" y "001" se consideran la representación decimal del mismo número entero porque la presencia de ceros a la izquierda se ignora al comparar números decimales. valores.

pista:

  • 1 <= word.length <= 1000
  • word Compuesto por números y letras minúsculas en inglés.

Pases

26,2K

Envíos

59,7K

Tasa de aprobación

43,9%

Solución al problema: hace algún tiempo compartí la idea de programación de la máquina de estados con mis colegas y tomé este tema para practicar. Si convierte una cadena en un número, dado que la pregunta no limita el rango del número, existe el riesgo de cruzar el límite cuando se transfiere directamente, por lo que la cadena aún se usa para el procesamiento. La idea básica es construir una máquina de estados: estado inicial-estado no válido-estado válido (el estado comienza con '0' y el estado comienza con distinto de 0), la condición de conmutación es atravesar la cadena y cambiar de acuerdo con la entrada. El valor de retorno se deduplica según las características del conjunto.

El código se muestra a continuación:

class Solution {
public:
    int numDifferentIntegers(string word) {
        // 状态机方法一次遍历,使用set去重
        int state=0;        // 0-表示无效的字母或者0,1表示遇到数字1-9了;2表示遇到0
        string temstr="";
        set<string> set_str;
        for(auto i:word)
        {
            if(state==0 && i<='9' && i>'0')
            {
                state=1;
                temstr+=i;
            }
            else if(state==0 && i=='0')
            {
                state=2;
                temstr+=i;
            }
            else if(state==2 && i<='9' && i>'0')
            {
                temstr="";
                state=1;
                temstr+=i;
            }
            else if(state==2 && i=='0')
            {
                temstr="";
                state=2;
                temstr+=i;
            }
            else if(state==2 && (i<='z' && i>='a'))
            {
                set_str.insert(temstr);
                state=0;
                temstr="";
            }
            else if(state == 1 && i<='9' && i>='0')
            {
                state=1;
                temstr+=i;
            }
            else if(state==1 && (i<='z' && i>='a'))
            {
                set_str.insert(temstr);
                state=0;
                temstr="";
            }
            else
            {
                continue;
            }
        }
        if(state==1 || state==2)
            set_str.insert(temstr);
        return set_str.size();
    }
};

 

C++

tiempo 0 ms

derrotar

100%

RAM6.5MB

derrotar

33,4%

Supongo que te gusta

Origin blog.csdn.net/weixin_41579872/article/details/128202389
Recomendado
Clasificación