Skip to content
Related Articles
Find the duplicate characters in a string in O(1) space
• Difficulty Level : Medium
• Last Updated : 11 Jun, 2021

Given a string str, the task is to find all the duplicate characters present in a given string in lexicographical order without using any additional data structure.

Examples:

Input: str = “geeksforgeeks”
Output: e g k s
Explanation:
Frequency of character ‘g’ = 2
Frequency of character ‘e’ = 4
Frequency of character ‘k’ = 2
Frequency of character ‘s’ = 2
Therefore, the required output is e g k s.

Input: str = “apple”
Output:
Explanation:
Frequency of character ‘p’ = 2.
Therefore, the required output is p.

Approach: Follow the steps below to solve the problem:

Below is the implementation of the above approach:

## C++

 `// C++ program to implement``// the above approach``#include ``using` `namespace` `std;` `// Function to find duplicate characters``// in string without using any additional``// data structure``void` `findDuplicate(string str, ``int` `N)``{` `    ``// Check if (i + 'a') is present``    ``// in str at least once or not.``    ``int` `first = 0;` `    ``// Check if (i + 'a') is present``    ``// in str at least twice or not.``    ``int` `second = 0;` `    ``// Iterate over the characters``    ``// of the string str``    ``for` `(``int` `i = 0; i < N; i++) {` `        ``// If str[i] has already occurred in str``        ``if` `(first & (1 << (str[i] - ``'a'``))) {` `            ``// Set (str[i] - 'a')-th bit of second``            ``second``                ``= second | (1 << (str[i] - ``'a'``));``        ``}``        ``else` `{` `            ``// Set (str[i] - 'a')-th bit of second``            ``first``                ``= first | (1 << (str[i] - ``'a'``));``        ``}``    ``}` `    ``// Iterate over the range [0, 25]``    ``for` `(``int` `i = 0; i < 26; i++) {` `        ``// If i-th bit of both first``        ``// and second is Set``        ``if` `((first & (1 << i))``            ``&& (second & (1 << i))) {` `            ``cout << ``char``(i + ``'a'``) << ``" "``;``        ``}``    ``}``}` `// Driver Code``int` `main()``{``    ``string str = ``"geeksforgeeks"``;``    ``int` `N = str.length();` `    ``findDuplicate(str, N);``}`

## Java

 `// Java program for the above approach``public` `class` `GFG``{` `  ``// Function to find duplicate characters``  ``// in string without using any additional``  ``// data structure``  ``static` `void` `findDuplicate(String str, ``int` `N)``  ``{` `    ``// Check if (i + 'a') is present``    ``// in str at least once or not.``    ``int` `first = ``0``;` `    ``// Check if (i + 'a') is present``    ``// in str at least twice or not.``    ``int` `second = ``0``;` `    ``// Iterate over the characters``    ``// of the string str``    ``for` `(``int` `i = ``0``; i < N; i++)``    ``{` `      ``// If str[i] has already occurred in str``      ``if` `((first & (``1` `<< (str.charAt(i) - ``'a'``))) != ``0``)``      ``{` `        ``// Set (str[i] - 'a')-th bit of second``        ``second``          ``= second | (``1` `<< (str.charAt(i) - ``'a'``));``      ``}``      ``else``      ``{` `        ``// Set (str[i] - 'a')-th bit of second``        ``first``          ``= first | (``1` `<< (str.charAt(i) - ``'a'``));``      ``}``    ``}` `    ``// Iterate over the range [0, 25]``    ``for` `(``int` `i = ``0``; i < ``26``; i++)``    ``{` `      ``// If i-th bit of both first``      ``// and second is Set``      ``if` `(((first & (``1` `<< i))``           ``& (second & (``1` `<< i))) != ``0``) {` `        ``System.out.print((``char``)(i + ``'a'``) + ``" "``);``      ``}``    ``}``  ``}` `  ``// Driver Code``  ``static` `public` `void` `main(String args[])``  ``{``    ``String str = ``"geeksforgeeks"``;``    ``int` `N = str.length();` `    ``findDuplicate(str, N);``  ``}``}` `// This code is contributed by AnkThon.`

## Python3

 `# Python 3 code added. program to implement``# the above approach` `# Function to find duplicate characters``# in str1ing without using any additional``# data str1ucture``def` `findDuplicate(str1, N):``  ` `    ``# Check if (i + 'a') is present``    ``# in str1 at least once or not.``    ``first ``=` `0` `    ``# Check if (i + 'a') is present``    ``# in str1 at least twice or not.``    ``second ``=` `0` `    ``# Iterate over the characters``    ``# of the str1ing str1``    ``for` `i ``in` `range``(N):``      ` `        ``# If str1[i] has already occurred in str1``        ``if` `(first & (``1` `<< (``ord``(str1[i]) ``-` `97``))):``          ` `            ``# Set (str1[i] - 'a')-th bit of second``            ``second ``=` `second | (``1` `<< (``ord``(str1[i]) ``-` `97``))``        ``else``:``            ``# Set (str1[i] - 'a')-th bit of second``            ``first ``=` `first | (``1` `<< (``ord``(str1[i]) ``-` `97``))` `    ``# Iterate over the range [0, 25]``    ``for` `i ``in` `range``(``26``):``      ` `        ``# If i-th bit of both first``        ``# and second is Set``        ``if` `((first & (``1` `<< i)) ``and` `(second & (``1` `<< i))):``            ``print``(``chr``(i ``+` `97``), end ``=` `" "``)` `# Driver Code``if` `__name__ ``=``=` `'__main__'``:``    ``str1 ``=` `"geeksforgeeks"``    ``N ``=` `len``(str1)``    ``findDuplicate(str1, N)` `    ``# This code is contributed by SURENDRA_GANGWAR.`

## C#

 `// C# program for the above approach``using` `System;``class` `GFG``{` `  ``// Function to find duplicate characters``  ``// in string without using any additional``  ``// data structure``  ``static` `void` `findDuplicate(``string` `str, ``int` `N)``  ``{` `    ``// Check if (i + 'a') is present``    ``// in str at least once or not.``    ``int` `first = 0;` `    ``// Check if (i + 'a') is present``    ``// in str at least twice or not.``    ``int` `second = 0;` `    ``// Iterate over the characters``    ``// of the string str``    ``for` `(``int` `i = 0; i < N; i++) {` `      ``// If str[i] has already occurred in str``      ``if` `((first & (1 << (str[i] - ``'a'``))) != 0)``      ``{` `        ``// Set (str[i] - 'a')-th bit of second``        ``second``          ``= second | (1 << (str[i] - ``'a'``));``      ``}``      ``else``      ``{` `        ``// Set (str[i] - 'a')-th bit of second``        ``first``          ``= first | (1 << (str[i] - ``'a'``));``      ``}``    ``}` `    ``// Iterate over the range [0, 25]``    ``for` `(``int` `i = 0; i < 26; i++)``    ``{` `      ``// If i-th bit of both first``      ``// and second is Set``      ``if` `(((first & (1 << i))``           ``& (second & (1 << i))) != 0) {` `        ``Console.Write((``char``)(i + ``'a'``) + ``" "``);``      ``}``    ``}``  ``}` `  ``// Driver Code``  ``static` `public` `void` `Main()``  ``{``    ``string` `str = ``"geeksforgeeks"``;``    ``int` `N = str.Length;` `    ``findDuplicate(str, N);``  ``}``}` `// This code is contributed by susmitakundugoaldanga.`

## Javascript

 ``
Output:
`e g k s`

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

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