Dada una string str , nuestra tarea es encontrar el carácter alfabético más grande , cuyas mayúsculas y minúsculas están presentes en la string. Se debe devolver el carácter en mayúscula. Si no existe tal carácter, devuelva -1; de lo contrario, imprima la letra mayúscula del carácter.
Ejemplos:
Entrada: str = “admeDCAB”
Salida: D
Explicación:
tanto los caracteres en mayúsculas como en minúsculas de la letra D están presentes en la string y también es el carácter alfabético más grande, por lo que nuestra salida es D.Entrada: str = “dAeB”
Salida: -1
Explicación:
Aunque el carácter más grande es d en la string, pero la versión en mayúsculas no está presente, por lo tanto, la salida es -1.
Enfoque ingenuo: para resolver el problema mencionado anteriormente, el método ingenuo es verificar la presencia de cada carácter en la string, tanto en mayúsculas como en minúsculas, es decir, para la letra A, tanto ‘a’ como ‘A’ deben estar allí en la string . Si dicha letra está presente, realizará un seguimiento de ese carácter y se actualizará solo si el carácter actual es mayor que el carácter elegido anteriormente. Este método requiere un tiempo O(n 2 ) en el peor de los casos y puede optimizarse aún más.
Enfoque eficiente: para optimizar el método anterior, usamos el hecho de que tenemos 26 caracteres en el alfabeto inglés, podemos realizar un seguimiento de los caracteres en minúsculas y mayúsculas manteniendo una array de tamaño 26. Mientras iteramos a través de la string dada, marcaremos verdadero tanto en la array si el carácter actual está presente tanto en mayúsculas como en minúsculas. Después de marcar todos los caracteres presentes en la array respectiva, ejecutaremos un ciclo de 25 a 0 y verificaremos si ambas arrays tienen marcado ‘verdadero’. En caso afirmativo, imprimimos la letra mayúscula de ese carácter; de lo contrario, devolvemos -1.
A continuación se muestra la implementación del enfoque anterior:
Java
// Java program to Find the Largest Alphabetic // Character present in the string of both // uppercase and lowercase English characters public class Main { // Function to find the Largest Alphabetic Character public static String largestCharacter(String str) { // Array for keeping track of both uppercase // and lowercase english alphabets boolean[] uppercase = new boolean[26]; boolean[] lowercase = new boolean[26]; char[] arr = str.toCharArray(); for (char c : arr) { if (Character.isLowerCase(c)) lowercase = true; if (Character.isUpperCase(c)) uppercase = true; } // Iterate from right side of array // to get the largest index character for (int i = 25; i >= 0; i--) { // Check for the character if both its // uppercase and lowercase exist or not if (uppercase[i] && lowercase[i]) return (char)(i + 'A') + ""; } // Return -1 if no such character whose // uppercase and lowercase present in // string str return "-1"; } // Driver code public static void main(String[] args) { String str = "admeDCAB"; System.out.println(largestCharacter(str)); } }
Python3
# Java program to Find the Largest Alphabetic # Character present in the string of both # uppercase and lowercase English characters # Function to find the Largest Alphabetic Character def largestCharacter(str): # Array for keeping track of both uppercase # and lowercase english alphabets uppercase = [False] * 26 lowercase = [False] * 26 arr = list(str) for c in arr: if (c.islower()): lowercase[ord(c) - ord('a')] = True if (c.isupper()): uppercase[ord(c) - ord('A')] = True # Iterate from right side of array # to get the largest index character for i in range(25,-1,-1): # Check for the character if both its # uppercase and lowercase exist or not if (uppercase[i] and lowercase[i]): return chr(i + ord('A')) + "" # Return -1 if no such character whose # uppercase and lowercase present in # string str return "-1" # Driver code str = "admeDCAB" print(largestCharacter(str)) # This code is contributed by shivanisinghss2110
C#
// C# program to Find the Largest Alphabetic // char present in the string of both // uppercase and lowercase English characters using System; class GFG{ // Function to find the Largest Alphabetic char public static String largestchar(String str) { // Array for keeping track of both uppercase // and lowercase english alphabets bool[] uppercase = new bool[26]; bool[] lowercase = new bool[26]; char[] arr = str.ToCharArray(); foreach(char c in arr) { if (char.IsLower(c)) lowercase = true; if (char.IsUpper(c)) uppercase = true; } // Iterate from right side of array // to get the largest index character for(int i = 25; i >= 0; i--) { // Check for the character if both its // uppercase and lowercase exist or not if (uppercase[i] && lowercase[i]) return (char)(i + 'A') + ""; } // Return -1 if no such character whose // uppercase and lowercase present in // string str return "-1"; } // Driver code public static void Main(String[] args) { String str = "admeDCAB"; Console.WriteLine(largestchar(str)); } } // This code is contributed by amal kumar choubey
Javascript
<script> // JavaScript program to Find the Largest Alphabetic // Character present in the string of both // uppercase and lowercase English characters // Function to find the Largest Alphabetic Character function largestCharacter(str) { // Array for keeping track of both uppercase // and lowercase english alphabets let uppercase = new Array(26); uppercase.fill(false); let lowercase = new Array(26); lowercase.fill(false); let arr = str.split(''); for (let c = 0; c < arr.length; c++) { if (arr == arr.toLowerCase()) lowercase[arr.charCodeAt() - 97] = true; if (arr == arr.toUpperCase()) uppercase[arr.charCodeAt() - 65] = true; } // Iterate from right side of array // to get the largest index character for (let i = 25; i >= 0; i--) { // Check for the character if both its // uppercase and lowercase exist or not if (uppercase[i] && lowercase[i]) return String.fromCharCode(i + 'A'.charCodeAt()) + ""; } // Return -1 if no such character whose // uppercase and lowercase present in // string str return "-1"; } let str = "admeDCAB"; document.write(largestCharacter(str)); </script>
Producción:
D
Complejidad de tiempo: O(n) donde n es la longitud de la string.
Complejidad espacial: O(52)