LeetCode [13 - números romanos a enteros] LeetCode [14 - prefijo común más largo]

Número romano a entero

Descripción del título

Los números romanos contienen los siguientes siete caracteres: I, V, X, L, C, D y M.
Inserte la descripción de la imagen aquí
Por ejemplo, el número romano 2 se escribe como II, que es dos paralelos 1. 12 se escribe como XII, que es X + II. 27 Escribe XXVII, que es XX + V + II.
Normalmente, el número pequeño en números romanos está a la derecha del número grande. Pero hay casos especiales, por ejemplo, 4 no está escrito como IIII, sino IV. El número 1 está a la izquierda del número 5, y el número representado es igual al número 4 obtenido al reducir el número 1 por el número 5. Del mismo modo, el número 9 se representa como IX. Esta regla especial solo se aplica a las siguientes seis situaciones:

  • Puedo colocarme a la izquierda de V (5) y X (10) para representar 4 y 9.
  • X se puede colocar a la izquierda de L (50) y C (100) para indicar 40 y 90.
  • C se puede colocar a la izquierda de D (500) y M (1000) para indicar 400 y 900.
    Dado un número romano, conviértalo a un número entero. La entrada debe estar en el rango de 1 a 3999.

Ideas para resolver problemas

números romanos sólo unos pocos caracteres específicos para representar, a continuación, además de estos caracteres específicos, los números restantes indican cómo
digamos, IIIde hecho, tres Ies la suma de tres 1, a continuación, 4- IVcómo expresar, de hecho, Vrestar Iella, Mientras el número entero correspondiente al número romano en la parte delantera sea menor que el número entero correspondiente al número romano en la parte posterior, se restará (se guardará con una variable) y se agregará si no es menor (se guardará con otra variable), el resultado final es Agregar dos variables

Implementación de código

        map<char, int> mp;
        mp['I'] = 1;
        mp['V'] = 5;
        mp['X'] = 10;
        mp['L'] = 50;
        mp['C'] = 100;
        mp['D'] = 500;
        mp['M'] = 1000;

		int cur = 0; //要计算减去的变量
		int pos = 0; //要及计算加上的变量
		for(int i = 0;i<s.size()-1;++i)
		{
			if(mp[s[i]]<mp[s[i+1]])
				cur-=mp[s[i]];
			else
				pos+=mp[s[i]];
		} 
		pos+=mp[s.back()];
		return pos+cur;

El prefijo común más largo

Descripción del título

Escriba una función para encontrar el prefijo común más largo en una matriz de cadenas.

Si no hay un prefijo público, se devuelve la cadena vacía "".
Inserte la descripción de la imagen aquí

Ideas para resolver problemas

El parámetro dado por la ontología es vector<string> vque, como es un prefijo público, la primera cadena se usa como estándar y la primera cadena se atraviesa. Si está vacía, devuelve "" directamente. Cada carácter escaneado es el mismo que cada cadena subsiguiente. Compare en la misma posición de, si se agrega lo mismo al resultado devuelto, si es diferente, se devolverá directamente.

Implementación de código

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        string res = "";
        if(strs.empty())
            return res;
        char ch ;
        for(int i =0 ;;++i)
        {
            if(i<strs[0].size())
                ch = strs[0].at(i);
            else
                return res;
            
            for(auto& e:strs)
            {   
                if(i < e.size() && ch == e[i]) //什么也不干,因为通过筛选
                    ;
                else
                    //没通过,直接返回
                    return res;
            }
            //加上每回通过的
            res+= ch;
        }
        return res;
    }
};
Sol
Publicado 253 artículos originales · elogiado 41 · 40,000+ vistas

Supongo que te gusta

Origin blog.csdn.net/liuyuchen282828/article/details/104656020
Recomendado
Clasificación