Check if the string contains consecutive letters and each letter occurs exactly once

30 Jun, 2022
Given string str. The task is to check if the string contains consecutive letters and each letter occurs exactly once. 
Examples:  
Input: str = “fced” Output: YesThe string contains ‘c’, ‘d’, ‘e’ and ‘f’ which are consecutive letters. 
Input: str = “xyz” Output: Yes
Input: str = “abd” Output: No
Approach:The following steps can be followed to solve the problem:  
Sort the given string in ascending order.
Check if s[i]-s[i-1]==1, for every index i from 1 to n-1.
If the condition holds for every index, print “Yes”, else print “No”.
Below is the implementation of the above approach:  
C++
Java
Python3
C#
Javascript
// C++ program to implement// the above approach#include <bits/stdc++.h>using namespace std; // Function to check if// the condition holdsbool check(string s){     // Get the length of the string    int l = s.length();     // sort the given string    sort(s.begin(), s.end());     // Iterate for every index and    // check for the condition    for (int i = 1; i < l; i++) {         // If are not consecutive        if (s[i] - s[i - 1] != 1)            return false;    }     return true;} // Driver codeint main(){     // 1st example    string str = "dcef";    if (check(str))        cout << "Yes\n";    else        cout << "No\n";     // 2nd example    str = "xyza";     if (check(str))        cout << "Yes\n";    else        cout << "No\n";     return 0;}
// Java program to implement// the above approachimport java.util.*;class GfG {     // Function to check if    // the condition holds    static boolean check(char s[])    {         // Get the length of the string        int l = s.length;         // sort the given string        Arrays.sort(s);         // Iterate for every index and        // check for the condition        for (int i = 1; i < l; i++) {             // If are not consecutive            if (s[i] - s[i - 1] != 1)                return false;        }         return true;    }     // Driver code    public static void main(String[] args)    {         // 1st example        String str = "dcef";        if (check(str.toCharArray()) == true)            System.out.println("Yes");        else            System.out.println("No");         // 2nd example        String str1 = "xyza";         if (check(str1.toCharArray()) == true)            System.out.println("Yes");        else            System.out.println("No");    }}
# Python3 program to implement# the above approach # Function to check if# the condition holdsdef check(s):     # Get the length of the string    l = len(s)     # sort the given string    s = ''.join(sorted(s))     # Iterate for every index and    # check for the condition    for i in range(1, l):         # If are not consecutive        if ord(s[i]) - ord(s[i - 1]) != 1:            return False     return True # Driver codeif __name__ == "__main__":     # 1st example    string = "dcef"         if check(string):        print("Yes")    else:        print("No")     # 2nd example    string = "xyza"     if check(string):        print("Yes")    else:        print("No") # This code is contributed by Rituraj Jain
// C# program to implement// the above approachusing System;using System.Collections; class GfG {     // Function to check if    // the condition holds    static bool check(char[] s)    {         // Get the length of the string        int l = s.Length;         // sort the given string        Array.Sort(s);         // Iterate for every index and        // check for the condition        for (int i = 1; i < l; i++) {             // If are not consecutive            if (s[i] - s[i - 1] != 1)                return false;        }         return true;    }     // Driver code    public static void Main()    {         // 1st example        string str = "dcef";        if (check(str.ToCharArray()) == true)            Console.WriteLine("Yes");        else            Console.WriteLine("No");         // 2nd example        String str1 = "xyza";         if (check(str1.ToCharArray()) == true)            Console.WriteLine("Yes");        else            Console.WriteLine("No");    }} // This code is contributed by Ryuga
<script>    // Javascript program to implement    // the above approach         // Function to check if    // the condition holds    function check(s)    {          // Get the length of the string        let l = s.length;          // sort the given string        s.sort();          // Iterate for every index and        // check for the condition        for (let i = 1; i < l; i++) {              // If are not consecutive            if ((s[i].charCodeAt() - s[i - 1].charCodeAt()) != 1)                return false;        }          return true;    }         // 1st example    let str = "dcef";    if (check(str.split('')) == true)      document.write("Yes" + "</br>");    else      document.write("No" + "</br>");     // 2nd example    let str1 = "xyza";     if (check(str1.split('')) == true)      document.write("Yes");    else      document.write("No");             // This code is contributed by mukesh07.</script>
Yes
No
 
Time complexity: O(N logN)
Auxiliary Space: O(1)
Efficient approach: 
Find max and min ASCII values of the string’s characters
Find the sum of the ASCII values of all the characters from the string
So if a sequence of characters are a(ASCII = 96) to d(ASCII = 99) then, the result expected sum should be (sum from 0 to 99) minus (sum of 0 to 95)
Mathematical Equation:
 MAX_VALUE*(MAX_VALUE+1)/2 - (MIN_VALUE-1)*((MIN_VALUE-1)+1)/2
Check whether the calculated sum and the expected sum is equal or not
Below is the implementation of the above approach: 
C++
Java
Python3
C#
Javascript
// C++ program to implement// the above approach#include<bits/stdc++.h>using namespace std; bool check(string str){    int min = INT_MAX;    int max = -INT_MAX;    int sum = 0;         // For all the characters of the string    for(int i = 0; i < str.size(); i++)    {                 // Find the ascii value of the character        int ascii = str[i];                 // Check if its a valid character,        // if not then return false        if (ascii < 96 || ascii > 122)            return false;         // Calculate sum of all the        // characters ascii values        sum += ascii;         // Find minimum ascii value        // from the string        if (min > ascii)            min = ascii;         // Find maximum ascii value        // from the string        if (max < ascii)            max = ascii;    }     // To get the previous element    // of the minimum ASCII value    min -= 1;     // Take the expected sum    // from the above equation    int eSum = ((max * (max + 1)) / 2) -               ((min * (min + 1)) / 2);     // Check if the expected sum is    // equals to the calculated sum or not    return sum == eSum;} // Driver codeint main(){         // 1st example    string str = "dcef";    if (check(str))        cout << ("Yes");    else        cout << ("No");     // 2nd example    string str1 = "xyza";    if (check(str1))        cout << ("\nYes");    else        cout << ("\nNo");} // This code is contributed by amreshkumar3
// Java program to implement// the above approachpublic class GFG {     public static boolean check(String str)    {        int min = Integer.MAX_VALUE;        int max = Integer.MIN_VALUE;        int sum = 0;         // for all the characters of the string        for (int i = 0; i < str.length(); i++) {             // find the ascii value of the character            int ascii = (int)str.charAt(i);             // check if its a valid character,            // if not then return false            if (ascii < 96 || ascii > 122)                return false;             // calculate sum of all the            // characters ascii values            sum += ascii;             // find minimum ascii value            // from the string            if (min > ascii)                min = ascii;             // find maximum ascii value            // from the string            if (max < ascii)                max = ascii;        }         // To get the previous element        // of the minimum ASCII value        min -= 1;         // take the expected sum        // from the above equation        int eSum            = ((max * (max + 1)) / 2)              - ((min * (min + 1)) / 2);         // check if the expected sum is        // equals to the calculated sum or not        return sum == eSum;    }     // Driver code    public static void main(String[] args)    {         // 1st example        String str = "dcef";        if (check(str))            System.out.println("Yes");        else            System.out.println("No");         // 2nd example        String str1 = "xyza";         if (check(str1))            System.out.println("Yes");        else            System.out.println("No");    }}// This code is contributed by Arijit Basu(ArijitXfx)
# Python3 program to implement# the above approachimport sys def check(str):         min = sys.maxsize    max = -sys.maxsize - 1    sum = 0     # For all the characters of the string    for i in range(len(str)):                 # Find the ascii value of the character        ascii = str[i]         # Check if its a valid character,        # if not then return false        if (ord(ascii) < 96 or ord(ascii) > 122):            return False         # Calculate sum of all the        # characters ascii values        sum += ord(ascii)         # Find minimum ascii value        # from the string        if (min > ord(ascii)):            min = ord(ascii)         # Find maximum ascii value        # from the string        if (max < ord(ascii)):            max = ord(ascii)     # To get the previous element    # of the minimum ASCII value    min -= 1     # Take the expected sum    # from the above equation    eSum = (((max * (max + 1)) // 2) -            ((min * (min + 1)) // 2))     # Check if the expected sum is    # equals to the calculated sum or not    return sum == eSum # Driver codeif __name__ == '__main__':         # 1st example    str = "dcef"         if (check(str)):        print("Yes")    else:        print("No")     # 2nd example    str1 = "xyza"         if (check(str1)):        print("Yes")    else:        print("No") # This code is contributed by mohit kumar 29
// C# program to implement// the above approachusing System;class GFG{         static bool check(string str)    {        int min = Int32.MaxValue;        int max = Int32.MinValue;        int sum = 0;          // for all the characters of the string        for (int i = 0; i < str.Length; i++)        {              // find the ascii value of the character            int ascii = (int)str[i];              // check if its a valid character,            // if not then return false            if (ascii < 96 || ascii > 122)                return false;              // calculate sum of all the            // characters ascii values            sum += ascii;              // find minimum ascii value            // from the string            if (min > ascii)                min = ascii;              // find maximum ascii value            // from the string            if (max < ascii)                max = ascii;        }          // To get the previous element        // of the minimum ASCII value        min -= 1;          // take the expected sum        // from the above equation        int eSum            = ((max * (max + 1)) / 2)              - ((min * (min + 1)) / 2);          // check if the expected sum is        // equals to the calculated sum or not        return sum == eSum;    }       // Driver code  static void Main()  {         // 1st example    string str = "dcef";    if (check(str))        Console.WriteLine("Yes");    else        Console.WriteLine("No");     // 2nd example    string str1 = "xyza";     if (check(str1))        Console.WriteLine("Yes");    else        Console.WriteLine("No");  }} // This code is contributed by divyesh072019.
<script>// javascript program to implement// the above approach       function check( str) {        var min = Number.MAX_VALUE;        var max = Number.MIN_VALUE;        var sum = 0;         // for all the characters of the string        for (i = 0; i < str.length; i++) {             // find the ascii value of the character            var ascii = parseInt( str.charCodeAt(i));             // check if its a valid character,            // if not then return false            if (ascii < 96 || ascii > 122)                return false;             // calculate sum of all the            // characters ascii values            sum += ascii;             // find minimum ascii value            // from the string            if (min > ascii)                min = ascii;             // find maximum ascii value            // from the string            if (max < ascii)                max = ascii;        }         // To get the previous element        // of the minimum ASCII value        min -= 1;         // take the expected sum        // from the above equation        var eSum = parseInt((max * (max + 1)) / 2) - ((min * (min + 1)) / 2);         // check if the expected sum is        // equals to the calculated sum or not        return sum == eSum;    }     // Driver code              // 1st example        var str = "dcef";        if (check(str))            document.write("Yes<br/>");        else            document.write("No<br/>");         // 2nd example        var str1 = "xyza";         if (check(str1))            document.write("Yes");        else            document.write("No"); // This code contributed by Rajput-Ji</script>
Yes
No
 
Time Complexity: O(N)  Auxiliary Space: O(1)
prerna saini
rituraj_jain
ankthon
Arijit Basu 1
amreshkumar3
khushboogoyal499
mohit kumar 29
divyesh072019
mukesh07
Rajput-Ji
rohitkumarsinghcna
surinderdawra388
school-programming
Sorting
Strings
Strings
Sorting
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Time Complexities of all Sorting Algorithms
Count Inversions in an array | Set 1 (Using Merge Sort)
Merge two sorted arrays
Sort an array of 0s, 1s and 2s | Dutch National Flag problem
Radix Sort
Write a program to reverse an array or string
Reverse a string in Java
Write a program to print all permutations of a given string
C++ Data Types
Check for Balanced Brackets in an expression (well-formedness) using Stack