Related Articles
Check if the string contains consecutive letters and each letter occurs exactly once
• Difficulty Level : Medium
• Last Updated : 10 May, 2021

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: Yes
The 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++

 `// C++ program to implement``// the above approach``#include ``using` `namespace` `std;` `// Function to check if``// the condition holds``bool` `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 code``int` `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

 `// Java program to implement``// the above approach``import` `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

 `# Python3 program to implement``# the above approach` `# Function to check if``# the condition holds``def` `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 code``if` `__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#

 `// C# program to implement``// the above approach``using` `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`

## Javascript

 ``
Output:
```Yes
No```

Time complexity: O(N logN)

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

 `// C++ program to implement``// the above approach``#include``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 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``int` `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

 `// Java program to implement``// the above approach``public` `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 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

 `# Python3 program to implement``# the above approach``import` `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 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 code``if` `__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#

 `// C# program to implement``// the above approach``using` `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 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.`

## Javascript

 ``
Output:
```Yes
No```

Time Complexity: O(N)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with industry experts, please refer DSA Live Classes

My Personal Notes arrow_drop_up