Dada una string, encuentre las palabras de longitud mínima y máxima en ella.
Ejemplos:
Input : "This is a test string" Output : Minimum length word: a Maximum length word: string Input : "GeeksforGeeks A computer Science portal for Geeks" Output : Minimum length word: A Maximum length word: GeeksforGeeks
Acercarse
La idea es mantener un índice inicial si y un índice final ei .
- si apunta al comienzo de una nueva palabra y recorremos la string usando ei.
- Cada vez que se encuentra un espacio o un carácter ‘\0’, calculamos la longitud de la palabra actual usando (ei – si) y la comparamos con la longitud mínima y máxima hasta el momento.
- Si es menor, actualice min_length y min_start_index (que apunta al comienzo de la palabra de longitud mínima).
- Si es mayor, actualice max_length y max_start_index (que apunta al inicio de la palabra de longitud máxima).
- Finalmente, actualice minWord y maxWord, que son strings de salida que se han enviado por referencia con las substrings que comienzan en min_start_index y max_start_index de longitud min_length y max_length respectivamente.
Implementación:
C++
// CPP Program to find Smallest and // Largest Word in a String #include<iostream> #include<cstring> using namespace std; void minMaxLengthWords(string input, string &minWord, string &maxWord) { // minWord and maxWord are received by reference // and not by value // will be used to store and return output int len = input.length(); int si = 0, ei = 0; int min_length = len, min_start_index = 0, max_length = 0, max_start_index = 0; // Loop while input string is not empty while (ei <= len) { if (ei < len && input[ei] != ' ') ei++; else { // end of a word // find curr word length int curr_length = ei - si; if (curr_length < min_length) { min_length = curr_length; min_start_index = si; } if (curr_length > max_length) { max_length = curr_length; max_start_index = si; } ei++; si = ei; } } // store minimum and maximum length words minWord = input.substr(min_start_index, min_length); maxWord = input.substr(max_start_index, max_length); } // Driver code int main() { string a = "GeeksforGeeks A Computer Science portal for Geeks"; string minWord, maxWord; minMaxLengthWords(a, minWord, maxWord); // to take input in string use getline(cin, a); cout << "Minimum length word: " << minWord << endl << "Maximum length word: " << maxWord << endl; }
Java
// Java Program to find Smallest and // Largest Word in a String class GFG { static String minWord = "", maxWord = ""; static void minMaxLengthWords(String input) { input=input.trim();//Triming any space before the String else space at start would be consider as smallest word // minWord and maxWord are received by reference // and not by value // will be used to store and return output int len = input.length(); int si = 0, ei = 0; int min_length = len, min_start_index = 0, max_length = 0, max_start_index = 0; // Loop while input string is not empty while (ei <= len) { if (ei < len && input.charAt(ei) != ' ') { ei++; } else { // end of a word // find curr word length int curr_length = ei - si; if (curr_length < min_length) { min_length = curr_length; min_start_index = si; } if (curr_length > max_length) { max_length = curr_length; max_start_index = si; } ei++; si = ei; } } // store minimum and maximum length words minWord = input.substring(min_start_index, min_start_index + min_length); maxWord = input.substring(max_start_index, max_start_index+max_length);//Earlier code was not working if the largests word is inbetween String } // Driver code public static void main(String[] args) { String a = "GeeksforGeeks A Computer Science portal for Geeks"; minMaxLengthWords(a); // to take input in string use getline(cin, a); System.out.print("Minimum length word: " + minWord + "\nMaximum length word: " + maxWord); } } // This code contributed by Rajput-Ji
Python 3
# Python3 program to find Smallest and # Largest Word in a String # defining the method to find the longest # word and the shortest word def minMaxLengthWords(inp): length = len(inp) si = ei = 0 min_length = length min_start_index = max_length = max_start_index = 0 # loop to find the length and stating index # of both longest and shortest words while ei <= length: if (ei < length) and (inp[ei] != " "): ei += 1 else: curr_length = ei - si # condition checking for the shortest word if curr_length < min_length: min_length = curr_length min_start_index = si # condition for the longest word if curr_length > max_length: max_length = curr_length max_start_index = si ei += 1 si = ei # extracting the shortest word using # it's starting index and length minWord = inp[min_start_index : min_start_index + min_length] # extracting the longest word using # it's starting index and length maxWord = inp[max_start_index : max_length] # printing the final result print("Minimum length word: ", minWord) print ("Maximum length word: ", maxWord) # Driver Code # Using this string to test our code a = "GeeksforGeeks A Computer Science portal for Geeks" minMaxLengthWords(a) # This code is contributed by Animesh_Gupta
C#
// C# Program to find Smallest and // Largest Word in a String using System; class GFG { static String minWord = "", maxWord = ""; static void minMaxLengthWords(String input) { // minWord and maxWord are received by reference // and not by value // will be used to store and return output int len = input.Length; int si = 0, ei = 0; int min_length = len, min_start_index = 0, max_length = 0, max_start_index = 0; // Loop while input string is not empty while (ei <= len) { if (ei < len && input[ei] != ' ') { ei++; } else { // end of a word // find curr word length int curr_length = ei - si; if (curr_length < min_length) { min_length = curr_length; min_start_index = si; } if (curr_length > max_length) { max_length = curr_length; max_start_index = si; } ei++; si = ei; } } // store minimum and maximum length words minWord = input.Substring(min_start_index, min_length); maxWord = input.Substring(max_start_index, max_length); } // Driver code public static void Main(String[] args) { String a = "GeeksforGeeks A Computer Science portal for Geeks"; minMaxLengthWords(a); // to take input in string use getline(cin, a); Console.Write("Minimum length word: " + minWord + "\nMaximum length word: " + maxWord); } } // This code has been contributed by 29AjayKumar
Javascript
<script> // JavaScript Program to find Smallest and // Largest Word in a String let minWord = ""; let maxWord = ""; function minMaxLengthWords(input) { // minWord and maxWord are received by reference // and not by value // will be used to store and return output let len = input.length; let si = 0, ei = 0; let min_length = len; let min_start_index = 0; let max_length = 0; let max_start_index = 0; // Loop while input string is not empty while (ei <= len) { if (ei < len && input[ei] != ' ') { ei++; } else { // end of a word // find curr word length let curr_length = ei - si; if (curr_length < min_length) { min_length = curr_length; min_start_index = si; } if (curr_length > max_length) { max_length = curr_length; max_start_index = si; } ei++; si = ei; } } // store minimum and maximum length words minWord = input.substring(min_start_index,min_start_index + min_length); maxWord = input.substring(max_start_index, max_length); } // Driver code let a = "GeeksforGeeks A Computer Science portal for Geeks"; minMaxLengthWords(a); // to take input in string use getline(cin, a); document.write("Minimum length word: " + minWord+"<br>" + "Maximum length word: " + maxWord); </script>
Producción
Minimum length word: A Maximum length word: GeeksforGeeks
Complejidad de tiempo: O(n), donde n es la longitud de la string.
Espacio auxiliar: O(n), donde n es la longitud de la string.
Esto se debe a que cuando se pasa una string en la función, crea una copia de sí mismo en la pila.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA