# 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: stringInput : "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.

Method 2: By Using Regular Expressions

In this approach we uses regular expressions to find words in a given input string and iterates through them. It keeps track of the smallest and largest words based on their lengths and prints them.

• First, Define a regular expression pattern to match words.
• Then, Create iterators to search for words within the input string.
• Initialize variables to store the smallest and largest words.
• Iterate through the words in the string.
• Check if the current word is smaller than the smallest word.
• Check if the current word is larger than the largest word .
• At the end ,print the smallest and largest words.

## C++

 `#include ``#include ``#include ``#include ` `// Function to find the smallest and largest words in a string using regular expressions``void` `findSmallestLargestWordsRegex(``const` `std::string& input) {``    ``// Define a regular expression pattern to match words``    ``std::regex wordRegex(``"\\b\\w+\\b"``);` `    ``// Create iterators to search for words within the input string``    ``std::sregex_iterator wordsBegin(input.begin(), input.end(), wordRegex);``    ``std::sregex_iterator wordsEnd;` `    ``// Initialize variables to store the smallest and largest words``    ``std::string smallestWord, largestWord;` `    ``// Iterate through the words in the string``    ``for` `(std::sregex_iterator it = wordsBegin; it != wordsEnd; ++it) {``        ``std::smatch match = *it;``        ``std::string word = match.str();` `        ``// Check if the current word is smaller than the smallest word found so far``        ``if` `(word.length() < smallestWord.length() || smallestWord.empty()) {``            ``smallestWord = word;``        ``}` `        ``// Check if the current word is larger than the largest word found so far``        ``if` `(word.length() > largestWord.length()) {``            ``largestWord = word;``        ``}``    ``}` `    ``// Print the smallest and largest words``    ``std::cout << ``"Minimum length word: "` `<< smallestWord << std::endl;``    ``std::cout << ``"Maximum length word: "` `<< largestWord << std::endl;``}` `int` `main() {``    ``// Input string``    ``std::string input = ``"This is a test string"``;` `    ``// Call the function to find and display the smallest and largest words``    ``findSmallestLargestWordsRegex(input);` `    ``return` `0;``}``// Siddhesh`

## Java

 `import` `java.util.regex.Matcher;``import` `java.util.regex.Pattern;` `public` `class` `SmallestLargestWords {``    ``// Function to find the smallest and largest words in a string using regular expressions``    ``public` `static` `void` `findSmallestLargestWordsRegex(String input) {``        ``// Define a regular expression pattern to match words``        ``String wordRegex = ``"\\b\\w+\\b"``;``        ``Pattern pattern = Pattern.compile(wordRegex);``        ``Matcher matcher = pattern.matcher(input);` `        ``// Initialize variables to store the smallest and largest words``        ``String smallestWord = ``""``;``        ``String largestWord = ``""``;` `        ``// Iterate through the words in the string``        ``while` `(matcher.find()) {``            ``String word = matcher.group();` `            ``// Check if the current word is smaller than the smallest word found so far``            ``if` `(word.length() < smallestWord.length() || smallestWord.isEmpty()) {``                ``smallestWord = word;``            ``}` `            ``// Check if the current word is larger than the largest word found so far``            ``if` `(word.length() > largestWord.length()) {``                ``largestWord = word;``            ``}``        ``}` `        ``// Print the smallest and largest words``        ``System.out.println(``"Minimum length word: "` `+ smallestWord);``        ``System.out.println(``"Maximum length word: "` `+ largestWord);``    ``}` `    ``public` `static` `void` `main(String[] args) {``        ``// Input string``        ``String input = ``"This is a test string"``;` `        ``// Call the function to find and display the smallest and largest words``        ``findSmallestLargestWordsRegex(input);``    ``}``}``// Siddhesh`

## Python3

 `import` `re` `# Function to find the smallest and largest words in a string using regular expressions``def` `find_smallest_largest_words_regex(input_str):``    ``# Define a regular expression pattern to match words``    ``word_regex ``=` `r``'\b\w+\b'``    ``words ``=` `re.findall(word_regex, input_str)` `    ``# Initialize variables to store the smallest and largest words``    ``smallest_word ``=` `""``    ``largest_word ``=` `""` `    ``# Iterate through the words in the string``    ``for` `word ``in` `words:``        ``# Check if the current word is smaller than the smallest word found so far``        ``if` `len``(word) < ``len``(smallest_word) ``or` `not` `smallest_word:``            ``smallest_word ``=` `word` `        ``# Check if the current word is larger than the largest word found so far``        ``if` `len``(word) > ``len``(largest_word):``            ``largest_word ``=` `word` `    ``# Print the smallest and largest words``    ``print``(``"Minimum length word:"``, smallest_word)``    ``print``(``"Maximum length word:"``, largest_word)` `# Input string``input_str ``=` `"This is a test string"` `# Call the function to find and display the smallest and largest words``find_smallest_largest_words_regex(input_str)` `# Siddhesh`

## C#

 `using` `System;``using` `System.Text.RegularExpressions;` `class` `Program``{``    ``// Function to find the smallest and largest words in a string using regular expressions``    ``static` `void` `FindSmallestLargestWordsRegex(``string` `input)``    ``{``        ``// Define a regular expression pattern to match words``        ``string` `wordPattern = ``@"\b\w+\b"``;` `        ``// Use Regex.Matches to get a collection of words``        ``MatchCollection words = Regex.Matches(input, wordPattern);` `        ``// Initialize variables to store the smallest and largest words``        ``string` `smallestWord = ``null``, largestWord = ``null``;` `        ``// Iterate through the words in the collection``        ``foreach` `(Match match ``in` `words)``        ``{``            ``string` `word = match.Value;` `            ``// Check if the current word is smaller than the smallest word found so far``            ``if` `(``string``.IsNullOrEmpty(smallestWord) || word.Length < smallestWord.Length)``            ``{``                ``smallestWord = word;``            ``}` `            ``// Check if the current word is larger than the largest word found so far``            ``if` `(``string``.IsNullOrEmpty(largestWord) || word.Length > largestWord.Length)``            ``{``                ``largestWord = word;``            ``}``        ``}` `        ``// Print the smallest and largest words``        ``Console.WriteLine(``"Minimum length word: "` `+ smallestWord);``        ``Console.WriteLine(``"Maximum length word: "` `+ largestWord);``    ``}` `    ``static` `void` `Main()``    ``{``        ``// Input string``        ``string` `input = ``"This is a test string"``;` `        ``// Call the function to find and display the smallest and largest words``        ``FindSmallestLargestWordsRegex(input);``    ``}``}` `// This code is contributed by shivamgupta310570`

## Javascript

 `// Function to find the smallest and largest words in a string using regular expressions``function` `findSmallestLargestWordsRegex(input) {``    ``// Define a regular expression pattern to match words``    ``const wordRegex = /\b\w+\b/g;` `    ``// Create an array of words by matching the regular expression``    ``const words = input.match(wordRegex) || [];` `    ``// Initialize variables to store the smallest and largest words``    ``let smallestWord = ``''``, largestWord = ``''``;` `    ``// Iterate through the words in the array``    ``for` `(const word of words) {``        ``// Check if the current word is smaller than the smallest word found so far``        ``if` `(word.length < smallestWord.length || smallestWord.length === 0) {``            ``smallestWord = word;``        ``}` `        ``// Check if the current word is larger than the largest word found so far``        ``if` `(word.length > largestWord.length) {``            ``largestWord = word;``        ``}``    ``}` `    ``// Print the smallest and largest words``    ``console.log(``"Minimum length word:"``, smallestWord);``    ``console.log(``"Maximum length word:"``, largestWord);``}` `// Input string``const input = ``"This is a test string"``;` `// Call the function to find and display the smallest and largest words``findSmallestLargestWordsRegex(input);` `// This code is contributed by shivamgupta0987654321`

Output

Minimum length word: a

Maximum length word: string

Time complexity is O(n), n is length of string

Space complexity is O(m), m is the length of the longest word.

Previous
Next