Skip to content
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. Join the First-Step-to-DSA Course for Class 9 to 12 students , specifically designed to introduce data structures and algorithms to the class 9 to 12 students

My Personal Notes arrow_drop_up