 GeeksforGeeks App
Open App Browser
Continue

# Program to find Smallest and Largest Word in a String

Given a string, find the minimum and the maximum length words in it.

Examples:

```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```

Method 1: The idea is to keep a starting index si and an ending index ei

• si points to the starting of a new word and we traverse the string using ei.
• Whenever a space or ‘\0’ character is encountered,we compute the length of the current word using (ei – si) and compare it with the minimum and the maximum length so far.
• If it is less, update the min_length and the min_start_index( which points to the starting of the minimum length word).
• If it is greater, update the max_length and the max_start_index( which points to the starting of the maximum length word).
• Finally, update minWord and maxWord which are output strings that have been sent by reference with the substrings starting at min_start_index and max_start_index of length min_length and max_length respectively.

Below is the implementation of the above approach:

## C++

 `// CPP Program to find Smallest and``// Largest Word in a String``#include``#include``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``import` `java.io.*;``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

 ``

Output

```Minimum length word: A
Maximum length word: GeeksforGeeks```

Time Complexity: O(n), where n is the length of string.
Auxiliary Space: O(n), where n is the length of string. This is because when string is passed in the function it creates a copy of itself in stack.

My Personal Notes arrow_drop_up