Dada una fórmula química como una string, la tarea es obtener el recuento de átomos en esta fórmula química.
Ejemplos:
Input: str = "Fe2H3OH" Output: Fe 2 H 4 O 1 Input: str = "NaCl2NaO2" Output: Na 2 Cl 2 O 2
Enfoque: El siguiente enfoque funciona en el lenguaje de programación Java:
- Tome LinkedHashMap para almacenar el nombre del átomo (clave) y el recuento (valor) en el orden de inserción.
- Compruebe si el carácter de string está en minúsculas y luego agréguelo al carácter de string en mayúsculas anterior.
- Verifique si la string contiene el número y luego agregue al conteo (valor) a su nombre de átomo particular (clave).
- Imprima el nombre del átomo (clave) así como el conteo (valor).
A continuación se muestra la implementación del enfoque anterior:
Java
// Java program to parse the molecule // and get the atoms count import java.io.*; import java.util.*; class GFG { static void getCount(String str) { // Use LinkedHashmap to store // elements in insertion order Map<String, Integer> mp = new LinkedHashMap<String, Integer>(); for (int i = 0; i < str.length(); i++) { int count = 0; // Convert the string element into character char c = str.charAt(i); String a = " "; // Convert the character element // into string element a = String.valueOf(c); // Check string contains the Capital A - Z value. if (a.matches("[A-Z]")) { for (int j = i + 1; j < str.length(); j++) { char d = str.charAt(j); String b = String.valueOf(d); // Check string contains the small a-z value. if (b.matches("[a-z]")) { a += b; if (mp.get(a) == null) mp.put(a, 1); else mp.put(a, mp.get(a) + 1); count = 1; } // Check string contains the number value. else if (b.matches("[\\d]")) { int k = Integer.parseInt(b); mp.put(a, k); count = 1; } else { i = j - 1; break; } } if (count == 0) { if (mp.get(a) == null) mp.put(a, 1); else mp.put(a, mp.get(a) + 1); } } } System.out.println("\nAtom count:"); for (Map.Entry<String, Integer> entry : mp.entrySet()) System.out.println(entry.getKey() + " " + entry.getValue()); mp.clear(); } // Driver code public static void main(String[] args) { String str = "Fe2H3OH"; System.out.println("Given molecule: " + str); getCount(str); } }
Producción:
Given molecule: Fe2H3OH Atom count: Fe 2 H 4 O 1