Given a string Str. The task is to check if it is Pangram or not.
A pangram is a sentence containing every letter in the English Alphabet.
Examples:
Input: “The quick brown fox jumps over the lazy dog”
Output: is a Pangram
Explanation: Contains all the characters from ‘a’ to ‘z’]
Input: “The quick brown fox jumps over the dog”
Output: is not a Pangram
Explanation: Doesn’t contain all the characters from ‘a’ to ‘z’, as ‘l’, ‘z’, ‘y’ are missing
Approach 1: Below is the idea to solve the problem
Create a mark[] array of Boolean types and iterate through all the characters of the string and mark it as visited. Lowercase and Uppercase are considered the same. So ‘A’ and ‘a’ are marked in index 0 and similarly ‘Z’ and ‘z’ are marked in index 25.
After iterating through all the characters check whether all the characters are marked or not. If not then return false as this is not a pangram else return true.
Follow the below steps to Implement the idea:
- Create a bool vector mark[] of size 26.
- Iterate through all characters of the string str and mark str[i] – ‘a’ or str[i] – ‘A’ as 1 for lower and upper characters respectively.
- Iterate through all the indices of mark[]
- If all indices are marked visited then return is a Pangram
- Else return is not a Pangram.
Below is the Implementation of above approach
C++
#include <bits/stdc++.h>
using namespace std;
bool checkPangram(string& str)
{
vector< bool > mark(26, false );
int index;
for ( int i = 0; i < str.length(); i++) {
if ( 'A' <= str[i] && str[i] <= 'Z' )
index = str[i] - 'A' ;
else if ( 'a' <= str[i] && str[i] <= 'z' )
index = str[i] - 'a' ;
else
continue ;
mark[index] = true ;
}
for ( int i = 0; i <= 25; i++)
if (mark[i] == false )
return ( false );
return ( true );
}
int main()
{
string str = "The quick brown fox jumps over the"
" lazy dog" ;
if (checkPangram(str) == true )
printf ( " %s \nis a pangram" , str.c_str());
else
printf ( " %s \nis not a pangram" , str.c_str());
return (0);
}
|
C
#include <stdbool.h>
#include <stdio.h>
#include <string.h>
bool checkPangram( char str[])
{
bool mark[26];
for ( int i = 0; i < 26; i++)
mark[i] = false ;
int index;
size_t size = strlen (str);
for ( int i = 0; i < size; i++) {
if ( 'A' <= str[i] && str[i] <= 'Z' )
index = str[i] - 'A' ;
else if ( 'a' <= str[i] && str[i] <= 'z' )
index = str[i] - 'a' ;
else
continue ;
mark[index] = true ;
}
for ( int i = 0; i <= 25; i++)
if (mark[i] == false )
return ( false );
return ( true );
}
int main()
{
char str[]
= "The quick brown fox jumps over the lazy dog" ;
if (checkPangram(str) == true )
printf ( " %s \nis a pangram" , str);
else
printf ( " %s \nis not a pangram" , str);
return (0);
}
|
Java
import java.io.*;
class GFG {
public static boolean checkPangram(String str)
{
boolean [] mark = new boolean [ 26 ];
int index = 0 ;
for ( int i = 0 ; i < str.length(); i++) {
if ( 'A' <= str.charAt(i)
&& str.charAt(i) <= 'Z' )
index = str.charAt(i) - 'A' ;
else if ( 'a' <= str.charAt(i)
&& str.charAt(i) <= 'z' )
index = str.charAt(i) - 'a' ;
else
continue ;
mark[index] = true ;
}
for ( int i = 0 ; i <= 25 ; i++)
if (mark[i] == false )
return ( false );
return ( true );
}
public static void main(String[] args)
{
String str
= "The quick brown fox jumps over the lazy dog" ;
if (checkPangram(str) == true )
System.out.print(str + " \nis a pangram." );
else
System.out.print(str + " \nis not a pangram." );
}
}
|
Python3
def checkPangram(s):
List = []
for i in range ( 26 ):
List .append( False )
for c in s.lower():
if not c = = " " :
List [ ord (c) - ord ( 'a' )] = True
for ch in List :
if ch = = False :
return False
return True
sentence = "The quick brown fox jumps over the little lazy dog"
if (checkPangram(sentence)):
print ( )
print ( "\nis a pangram" )
else :
print ( )
print ( "\nis not a pangram" )
|
C#
using System;
class GFG {
public static bool checkPangram( string str)
{
bool [] mark = new bool [26];
int index = 0;
for ( int i = 0; i < str.Length; i++) {
if ( 'A' <= str[i] && str[i] <= 'Z' )
index = str[i] - 'A' ;
else if ( 'a' <= str[i] && str[i] <= 'z' )
index = str[i] - 'a' ;
else
continue ;
mark[index] = true ;
}
for ( int i = 0; i <= 25; i++)
if (mark[i] == false )
return ( false );
return ( true );
}
public static void Main()
{
string str
= "The quick brown fox jumps over the lazy dog" ;
if (checkPangram(str) == true )
Console.WriteLine(str + " \nis a pangram." );
else
Console.WriteLine(str + " \nis not a pangram." );
}
}
|
Javascript
<script>
function checkPangram(str)
{
mark = new Array(26).fill( false );
let index;
for (let i = 0; i < str.length; i++) {
if ( 'A' <= str[i] && str[i] <= 'Z' )
index = str.charCodeAt(i) - 'A' .charCodeAt(0);
else if ( 'a' <= str[i] && str[i] <= 'z' )
index = str.charCodeAt(i) - 'a' .charCodeAt(0);
else continue ;
mark[index] = true ;
}
for (let i = 0; i <= 25; i++)
if (mark[i] == false )
return false ;
return true ;
}
let str = "The quick brown fox jumps over the lazy dog" ;
document.write(str, "</br>" )
if (checkPangram(str) == true )
document.write( "\nis a pangram" );
else
document.write( "\nis not a pangram" );
</script>
|
Output The quick brown fox jumps over the lazy dog
is a pangram
Time Complexity : O(n), where n is the length of our string
Auxiliary Space: O(1), as 26 size Boolean vector is constant.
Approach 2 (Using Set) : The idea to use a set is quite obvious because to check a pangram, there must be 26 alphabets no matter whether it is a lowercase or uppercase character. To check whether a alphabet is already present or not, the alphabets have been inserted in lowercase and the set size must be 26.
Follow the below steps to Implement the idea :
- Initialize a character set.
- Traverse over the string and check for each character.
- If the character is an lowercase alphabet then insert in the set.
- In case it is a uppercase alphabet convert it in lowercase using the tolower() function and then insert it.
- At the end simply check whether the set size is 26 or not. If it’s true that means all alphabets in either lowercase or uppercase was present in the string.
Below is the code for the following approach :
C++
#include <bits/stdc++.h>
using namespace std;
bool checkPangram(string& str)
{
set< char > set;
for ( auto ch : str) {
if (ch >= 'a' and ch <= 'z' )
set.insert(ch);
if (ch >= 'A' and ch <= 'Z' ) {
ch = tolower (ch);
set.insert(ch);
}
}
return set.size() == 26;
}
int main()
{
string str = "The quick brown fox jumps over the"
" lazy dog" ;
if (checkPangram(str) == true )
cout << "It is a Pangram" << endl;
else
cout << "It is Not a Pangram" << endl;
return 0;
}
|
Java
import java.util.*;
public class Gfg {
static boolean checkPangram(String str) {
Set<Character> set = new HashSet<>();
for ( char ch : str.toCharArray()) {
if (ch >= 'a' && ch <= 'z' )
set.add(ch);
if (ch >= 'A' && ch <= 'Z' ) {
ch = Character.toLowerCase(ch);
set.add(ch);
}
}
return set.size() == 26 ;
}
public static void main(String[] args) {
String str = "The quick brown fox jumps over the lazy dog" ;
if (checkPangram(str))
System.out.println( "It is a Pangram" );
else
System.out.println( "It is Not a Pangram" );
}
}
|
Python3
def checkPangram(string):
char_set = set ()
for ch in string:
if ch > = 'a' and ch < = 'z' :
char_set.add(ch)
if ch > = 'A' and ch < = 'Z' :
ch = ch.lower()
char_set.add(ch)
return len (char_set) = = 26
string = "The quick brown fox jumps over the lazy dog"
if checkPangram(string) = = True :
print ( "It is a Pangram" )
else :
print ( "It is Not a Pangram" )
|
C#
using System;
using System.Collections.Generic;
class Program
{
static bool CheckPangram( string str)
{
HashSet< char > set = new HashSet< char >();
foreach ( char ch in str)
{
if (ch >= 'a' && ch <= 'z' )
set .Add(ch);
if (ch >= 'A' && ch <= 'Z' )
{
char lowerCh = Char.ToLower(ch);
set .Add(lowerCh);
}
}
return set .Count == 26;
}
static void Main()
{
string str = "The quick brown fox jumps over the lazy dog" ;
if (CheckPangram(str))
Console.WriteLine( "It is a Pangram" );
else
Console.WriteLine( "It is Not a Pangram" );
}
}
|
Javascript
function checkPangram(str) {
const set = new Set();
for (let ch of str) {
if (ch >= 'a' && ch <= 'z' ) {
set.add(ch);
}
if (ch >= 'A' && ch <= 'Z' ) {
ch = ch.toLowerCase();
set.add(ch);
}
}
return set.size === 26;
}
const str = "The quick brown fox jumps over the lazy dog" ;
if (checkPangram(str)) {
console.log( "It is a Pangram" );
} else {
console.log( "It is Not a Pangram" );
}
|
Time Complexity : O(NlogN), for traversing whole string and inserting all the characters at worst case takes logN time.
Space Complexity : O(1), using constant space for 26 characters at most.
This article is contributed by Rachit Belwariar. If you like GeeksforGeeks and would like to contribute, you can also write an article and mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.