Open In App

Missing characters to make a string Pangram

Improve
Improve
Improve
Like Article
Like
Save Article
Save
Share
Report issue
Report

Pangram is a sentence containing every letter in the English alphabet. Given a string, find all characters that are missing from the string, i.e., the characters that can make the string a Pangram. We need to print output in alphabetic order.

Examples: 

Input : welcome to geeksforgeeks
Output : abdhijnpquvxyz
Input : The quick brown fox jumps
Output : adglvyz

Approach 1: Using a set to keep track of present characters

  • Initialize an empty set to keep track of the present characters.
  • Iterate through each character in the input string.
  •  If the character is a lowercase letter, add it to the set.
  • If the character is an uppercase letter, convert it to lowercase and add it to the set.
  •  Initialize an empty string to store the missing characters.
  •  Iterate through each lowercase letter from ‘a’ to ‘z’.
  •  If the letter is not in the set, append it to the missing characters string.
  • If the missing characters string is empty, the input string is a pangram.
  • Otherwise, the missing characters string contains the characters that need to be added to the input string to make it a pangram. Print this string as the output.

C++




#include <iostream>
#include <string>
#include <algorithm>
#include <set>
using namespace std;
 
int main() {
    string str = "The quick brown fox jumps over the dog";
    set<char> present_chars;
 
    // add each character to the set
    for(int i=0; i<str.length(); i++){
        if (str[i] >= 'a' && str[i] <= 'z'){
            present_chars.insert(str[i]);
        }
        else if (str[i] >= 'A' && str[i] <= 'Z'){
            present_chars.insert(tolower(str[i]));
        }
    }
 
    // check which characters are missing
    string missing_chars = "";
    for(char c='a'; c<='z'; c++){
        if(present_chars.find(c) == present_chars.end()){
            missing_chars += c;
        }
    }
 
    // print the missing characters
    if(missing_chars.length() == 0){
        cout << "The string is a pangram." << endl;
    }
    else{
        cout <<  missing_chars << endl;
    }
 
    return 0;
}


Java




import java.util.HashSet;
 
public class Main {
 
    public static void main(String[] args) {
        String str = "The quick brown fox jumps over the dog";
        HashSet<Character> presentChars = new HashSet<>();
 
        // add each character to the set
        for(int i = 0; i < str.length(); i++){
            char c = str.charAt(i);
            if (c >= 'a' && c <= 'z'){
                presentChars.add(c);
            }
            else if (c >= 'A' && c <= 'Z'){
                presentChars.add(Character.toLowerCase(c));
            }
        }
 
        // check which characters are missing
        StringBuilder missingChars = new StringBuilder();
        for(char c = 'a'; c <= 'z'; c++){
            if(!presentChars.contains(c)){
                missingChars.append(c);
            }
        }
 
        // print the missing characters
        if(missingChars.length() == 0){
            System.out.println("The string is a pangram.");
        }
        else{
            System.out.println(missingChars);
        }
    }
}


Python




def main():
    str_ = "The quick brown fox jumps over the dog"
     
    # Use a set to store present characters
    present_chars = set()
 
    # Add each character to the set
    for char in str_:
        if char.isalpha():
            present_chars.add(char.lower())
 
    # Check which characters are missing
    missing_chars = "".join(c for c in "abcdefghijklmnopqrstuvwxyz" if c not in present_chars)
 
    # Print the missing characters
    if not missing_chars:
        print("The string is a pangram.")
    else:
        print(missing_chars)
 
if __name__ == "__main__":
    main()
 
# This Code Is Contributed By Shubham Tiwari


C#




using System;
using System.Collections.Generic;
 
public class GFG {
    public static void Main() {
        string str = "The quick brown fox jumps over the dog";
        HashSet<char> presentChars = new HashSet<char>();
 
        // add each character to the set
        foreach (char c in str) {
            if (Char.IsLetter(c)) {
                presentChars.Add(Char.ToLower(c));
            }
        }
 
        // check which characters are missing
        string missingChars = "";
        for (char c='a'; c<='z'; c++) {
            if (!presentChars.Contains(c)) {
                missingChars += c;
            }
        }
 
        // print the missing characters
        if (missingChars.Length == 0) {
            Console.WriteLine("The string is a pangram.");
        }
        else {
            Console.WriteLine(missingChars);
        }
    }
}
// This Code Is Contributed By Shubham Tiwari


Javascript




// Function to find missing characters in a string to make it a pangram
function findMissingChars(str) {
    const presentChars = new Set();
 
    // Add each character to the set
    for (let i = 0; i < str.length; i++) {
        const char = str[i].toLowerCase();
        if (char >= 'a' && char <= 'z') {
            presentChars.add(char);
        }
    }
 
    // Check which characters are missing
    let missingChars = '';
    for (let c = 'a'; c <= 'z'; c = String.fromCharCode(c.charCodeAt(0) + 1)) {
        if (!presentChars.has(c)) {
            missingChars += c;
        }
    }
 
    // Print the missing characters or indicate that the string is a pangram
    if (missingChars.length === 0) {
        console.log('The string is a pangram.');
    } else {
        console.log(missingChars);
    }
}
 
// Example usage
const str = "The quick brown fox jumps over the dog";
findMissingChars(str);


Output

alyz






Time Complexity: O(nlogn) 
Auxiliary Space: O(n)

We have discussed Pangram Checking. The idea is similar, we traverse a given string and mark all visited characters. In the end, we print all those characters which are not visited.

Lowercase and Uppercase characters are considered the same. 

C++




// C++ program to find characters that needs
// to be added to make Pangram
#include<bits/stdc++.h>
using namespace std;
const int MAX_CHAR = 26;
 
// Returns characters that needs to be added
// to make str
string missingChars(string str)
{
    // A boolean array to store characters
    // present in string.
    bool present[MAX_CHAR] = {false};
 
    // Traverse string and mark characters
    // present in string.
    for (int i=0; i<str.length(); i++)
    {
        if (str[i] >= 'a' && str[i] <= 'z')
            present[str[i]-'a'] = true;
        else if (str[i] >= 'A' && str[i] <= 'Z')
            present[str[i]-'A'] = true;
    }
 
    // Store missing characters in alphabetic
    // order.
    string res = "";
    for (int i=0; i<MAX_CHAR; i++)
        if (present[i] == false)
            res.push_back((char)(i+'a'));
 
    return res;
}
 
// Driver program
int main()
{
    string str = "The quick brown fox jumps "
                 "over the dog";
    cout << missingChars(str);
    return 0;
}       


Java




// Java program to find characters that
// needs to be added to make Pangram
import java.io.*;
import java.util.ArrayList;
 
class GFG{
     
private static ArrayList<Character>missingChars(
    String str, int strLength)
{
    final int MAX_CHARS = 26;
     
    // A boolean array to store characters
    // present in string.
    boolean[] present = new boolean[MAX_CHARS];
    ArrayList<Character> charsList = new ArrayList<>();
     
    // Traverse string and mark characters
    // present in string.
    for(int i = 0; i < strLength; i++)
    {
        if ('A' <= str.charAt(i) &&
                   str.charAt(i) <= 'Z')
            present[str.charAt(i) - 'A'] = true;
        else if ('a' <= str.charAt(i) &&
                        str.charAt(i) <= 'z')
            present[str.charAt(i) - 'a'] = true;
    }
     
    // Store missing characters in alphabetic
    // order.
    for(int i = 0; i < MAX_CHARS; i++)
    {
        if (present[i] == false)
            charsList.add((char)(i + 'a'));
    }
    return charsList;
}
 
// Driver Code
public static void main(String[] args)
{
    String str = "The quick brown fox jumps " +
                 "over the dog";
                  
    ArrayList<Character> missing = GFG.missingChars(
        str, str.length());
         
    if (missing.size() >= 1)
    {
        for(Character character : missing)
        {
            System.out.print(character);
        }
    }
}
}
 
// This code is contributed by theSardul


Python3




# Python3 program to find characters
# that needs to be added to make Pangram
MAX_CHAR = 26
 
# Returns characters that needs
# to be added to make str
def missingChars(Str):
     
    # A boolean array to store characters
    # present in string.
    present = [False for i in range(MAX_CHAR)]
 
    # Traverse string and mark characters
    # present in string.
    for i in range(len(Str)):
        if (Str[i] >= 'a' and Str[i] <= 'z'):
            present[ord(Str[i]) - ord('a')] = True
        else if (Str[i] >= 'A' and Str[i] <= 'Z'):
            present[ord(Str[i]) - ord('A')] = True
 
    # Store missing characters in alphabetic
    # order.
    res = ""
 
    for i in range(MAX_CHAR):
        if (present[i] == False):
            res += chr(i + ord('a'))
             
    return res
 
# Driver code
Str = "The quick brown fox jumps over the dog"
 
print(missingChars(Str))
 
# This code is contributed by avanitrachhadiya2155


C#




// C# program to find characters that
// needs to be added to make Pangram
using System.Collections.Generic;
using System;
class GFG{
     
static List<char>missingChars (String str,
                               int strLength)
{
  int MAX_CHARS = 26;
 
  // A boolean array to store
  // characters present in string.
  bool[] present = new bool[MAX_CHARS];
  List<char>charsList = new List<char>();
 
  // Traverse string and mark
  // characters present in string.
  for(int i = 0; i < strLength; i++)
  {
    if ('A' <= str[i] &&
        str[i] <= 'Z')
      present[str[i] - 'A'] = true;
    else if ('a' <= str[i] &&
             str[i] <= 'z')
      present[str[i] - 'a'] = true;
  }
 
  // Store missing characters
  // in alphabetic order.
  for(int i = 0; i < 26; i++)
  {
    if (present[i] == false)
    {
      charsList.Add((char)(i + 'a'));
    }
  }
  return charsList;
}
 
// Driver Code
public static void Main()
{
  String str = "The quick brown fox jumps over the dog";
  List<char> missing = missingChars(str,
                                    str.Length);
  if (missing.Count >= 1)
  {
    foreach (var i in missing)
    {
      Console.Write(i);
    }
  }
}
}
 
// This code is contributed by Stream_Cipher


Javascript




<script>
    // Javascript program to find characters that
    // needs to be added to make Pangram
     
    function missingChars (str, strLength)
    {
      let MAX_CHARS = 26;
 
      // A boolean array to store
      // characters present in string.
      let present = new Array(MAX_CHARS);
      present.fill(false);
      let charsList = [];
 
      // Traverse string and mark
      // characters present in string.
      for(let i = 0; i < strLength; i++)
      {
        if ('A'.charCodeAt() <= str[i].charCodeAt() && str[i].charCodeAt() <= 'Z'.charCodeAt())
          present[str[i].charCodeAt() - 'A'.charCodeAt()] = true;
        else if ('a'.charCodeAt() <= str[i].charCodeAt() && str[i].charCodeAt() <= 'z'.charCodeAt())
          present[str[i].charCodeAt() - 'a'.charCodeAt()] = true;
      }
 
      // Store missing characters
      // in alphabetic order.
      for(let i = 0; i < 26; i++)
      {
        if (present[i] == false)
        {
          charsList.push(String.fromCharCode(i + 'a'.charCodeAt()));
        }
      }
      return charsList;
    }
     
    let str = "The quick brown fox jumps over the dog";
    let missing = missingChars(str, str.length);
    if (missing.length >= 1)
    {
      for(let i = 0; i < missing.length; i++)
      {
        document.write(missing[i]);
      }
    }
 
// This code is contributed by mukesh07.
</script>


Output

alyz






Time Complexity: O(n) 
Auxiliary Space: O(1)



Last Updated : 19 Oct, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads