# Check if both halves of the string have at least one different character

• Difficulty Level : Basic
• Last Updated : 16 Sep, 2021

Earlier we have discussed on how to check if both halves of the string have same set of characters. Now, we further extend our problem on checking if both halves of the string have at least one different character.

Examples:

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 experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

```Input : baaaab
Output: No, both halves do not differ at all
The two halves contain the same characters
and their frequencies match so not different
the character exists

Input : abccpb
Output : Yes, both halves differ by at least one character```

Method 1: (Two counter arrays)

• Split the string into two halves
• Traverse two different halves separately and count the occurrence of each character into two different counter array
• Now, traverse these arrays, and the if these array differ at a point, we get the answer as “Yes”

## C++

 `// C++ implementation to check if``// both halves of the string have``// at least one different character``#include ``#include ``#include ``using` `namespace` `std;``# define MAX 26` `// Function which break string into two halves``// Counts frequency of characters in each half``// Compares the two counter array and returns``// true if these counter arrays differ``bool` `function(string str)``{``    ``int` `l = str.length();``    ` `    ``// Declaration and initialization``    ``// of counter array``    ``int` `counter1[MAX];``    ``int` `counter2[MAX];``    ``memset``(counter1, 0, ``sizeof``(counter1));``    ``memset``(counter2, 0, ``sizeof``(counter2));``    ` `    ``for` `(``int` `i = 0; i < l / 2; i++)``        ``counter1[str[i] - ``'a'``]++;``    ``for` `(``int` `i = l / 2; i < l; i++)``        ``counter2[str[i] - ``'a'``]++;``    ``for` `(``int` `i = 0; i < MAX; i++)``        ``if` `(counter2[i] != counter1[i])``            ``return` `true``;``    ` `    ``return` `false``;``}` `// Driver function``int` `main()``{``    ``string str = ``"abcasdsabcae"``;``    ``if` `(function(str))``        ``cout << ``"Yes, both halves differ"``             ``<<``" by at least one character"``;``    ``else``        ``cout << ``"No, both halves do "``             ``<<``"not differ at all"``;``    ``return` `0;``}`

## Java

 `// Java implementation of the problem``import` `java.util.*;``import` `java.lang.*;` `class` `GeeksforGeeks {``    ``final` `static` `int` `MAX = ``26``;` `    ``// Function which break string into two halves``    ``// Counts frequency of characters in each half``    ``// Compares the two counter array and returns``    ``// true if these counter arrays differ``    ``static` `boolean` `function(String str)``    ``{``        ``int` `l = str.length();` `        ``// Declaration and initialization``        ``// of counter array``        ``int` `counter1[] = ``new` `int``[MAX];``        ``int` `counter2[] = ``new` `int``[MAX];``        ``for` `(``int` `i = ``0``; i < MAX; i++) {``            ``counter1[i] = ``0``;``            ``counter2[i] = ``0``;``        ``}` `        ``for` `(``int` `i = ``0``; i < l / ``2``; i++)``            ``counter1[str.charAt(i) - ``'a'``]++;``        ``for` `(``int` `i = l / ``2``; i < l; i++)``            ``counter2[str.charAt(i) - ``'a'``]++;``        ``for` `(``int` `i = ``0``; i < MAX; i++) {``            ``if` `(counter2[i] != counter1[i])``                ``return` `true``;``        ``}``        ``return` `false``;``    ``}` `    ``// Driver function``    ``public` `static` `void` `main(String args[])``    ``{``        ``String str = ``"abcasdsabcae"``;``        ``if` `(function(str))``            ``System.out.print(``"Yes, both halves "``+``            ``"differ by at least one character"``);``        ``else``            ``System.out.print(``"No, both halves "``+``            ``"do not differ at all"``);``    ``}``}`

## Python3

 `# Python implementation to check if``# both halves of the string have``# at least one different character` `MAX` `=` `26` `# Function which break string into two halves``# Counts frequency of characters in each half``# Compares the two counter array and returns``# true if these counter arrays differ``def` `function(st):``    ``global` `MAX``    ``l ``=` `len``(st)``    ` `    ``# Declaration and initialization``    ``# of counter array``    ``counter1, counter2 ``=` `[``0``] ``*` `MAX``, [``0``] ``*` `MAX``    ` `    ``for` `i ``in` `range``(l``/``/``2``):``        ``counter1[``ord``(st[i]) ``-` `ord``(``'a'``)] ``+``=` `1` `    ``for` `i ``in` `range``(l``/``/``2``, l):``        ``counter2[``ord``(st[i]) ``-` `ord``(``'a'``)] ``+``=` `1` `    ``for` `i ``in` `range``(``MAX``):``        ``if` `(counter2[i] !``=` `counter1[i]):``            ``return` `True``    ``return` `False`  `# Driver function``st ``=` `"abcasdsabcae"``if` `function(st): ``print``(``"Yes, both halves differ "``,``                       ``"by at least one character"``)``else``: ``print``(``"No, both halves do not differ at all"``)` `# This code is contributed by Ansu Kumari`

## C#

 `// C# implementation to check if``// both halves of the string have``// at least one different character`  `using` `System;` `class` `GeeksforGeeks {``    ``static` `int` `MAX = 26;` `    ``// Function which break string into two halves``    ``// Counts frequency of characters in each half``    ``// Compares the two counter array and returns``    ``// true if these counter arrays differ``    ``static` `bool` `function(String str)``    ``{``        ``int` `l = str.Length;` `        ``// Declaration and initialization``        ``// of counter array``        ``int` `[]counter1 = ``new` `int``[MAX];``        ``int` `[]counter2 = ``new` `int``[MAX];``        ``for` `(``int` `i = 0; i < MAX; i++)``        ``{``            ``counter1[i] = 0;``            ``counter2[i] = 0;``        ``}` `        ``for` `(``int` `i = 0; i < l / 2; i++)``            ``counter1[str[i] - ``'a'``]++;``        ``for` `(``int` `i = l / 2; i < l; i++)``            ``counter2[str[i] - ``'a'``]++;``        ``for` `(``int` `i = 0; i < MAX; i++) {``            ``if` `(counter2[i] != counter1[i])``                ``return` `true``;``        ``}``        ``return` `false``;``    ``}` `    ``// Driver function``    ``public` `static` `void` `Main()``    ``{``        ``String str = ``"abcasdsabcae"``;``        ``if` `(function(str))``            ``Console.WriteLine(``"Yes, both halves "``+``            ``"differ by at least one character"``);``        ``else``            ``Console.WriteLine(``"No, both halves "``+``            ``"do not differ at all"``);``    ``}``}` `//This code is contributed by vt_m.`

## PHP

 ``

## Javascript

 ``

Output:

`Yes, both halves differ by at least one character`

Method 2:(One counter array)

• This method uses only a single array of length 26.
• For the first half, we increment the characters in the counter array of length 26.
• For second array, we decrement the character in that same counter array.
• Now, if for an index corresponding to a character has non-zero value, that is the distinct character present
• The positive ones are ones present in the first half and the negative ones are characters in the second half

## C++

 `// C++ implementation to check if``// both halves of the string have``// at least one different character``#include ``#include ``#include ``using` `namespace` `std;``# define MAX 26` `// Function which break string into two halves``// Increments frequency of characters for first half``// Decrements frequency of characters for second half``// true if any index has non-zero value``bool` `function(string str)``{``    ``int` `l = str.length();``    ` `    ``// Declaration and initialization``    ``// of counter array``    ``int` `counter[MAX];``    ``memset``(counter, 0, ``sizeof``(counter));``    ``for` `(``int` `i = 0; i < l / 2; i++)``        ``counter[str[i] - ``'a'``]++;``    ``for` `(``int` `i = l / 2; i < l; i++)``        ``counter[str[i] - ``'a'``]--;``    ``for` `(``int` `i = 0; i < MAX; i++)``        ``if` `(counter[i] != 0)``            ``return` `true``;` `    ``return` `false``;``}` `// Driver function``int` `main()``{``    ``string str = ``"abcasdsabcae"``;``    ``if` `(function(str))``        ``cout << ``"Yes, both halves differ"``             ``<<``" by at least one character"``;``    ``else``        ``cout << ``"No, both halves do"``             ``<<``" not differ at all"``;``    ``return` `0;``}`

## Java

 `// Java implementation of the problem``import` `java.util.*;``import` `java.lang.*;` `class` `GeeksforGeeks {` `    ``final` `static` `int` `MAX = ``26``;` `    ``// Function which break string into two halves``    ``// Increments frequency of characters for first half``    ``// Decrements frequency of characters for second half``    ``// true if any index has non-zero value``    ``static` `boolean` `function(String str)``    ``{``        ``int` `l = str.length();` `        ``// Declaration and initialization``        ``// of counter array``        ``int` `counter[] = ``new` `int``[MAX];``        ``for` `(``int` `i = ``0``; i < MAX; i++)``            ``counter[i] = ``0``;``        ``for` `(``int` `i = ``0``; i < l / ``2``; i++)``            ``counter[str.charAt(i) - ``'a'``]++;``        ``for` `(``int` `i = l / ``2``; i < l; i++)``            ``counter[str.charAt(i) - ``'a'``]--;``        ``for` `(``int` `i = ``0``; i < MAX; i++)``            ``if` `(counter[i] != ``0``)``                ``return` `true``;``        ` `        ``return` `false``;``    ``}` `    ``// Driver function``    ``public` `static` `void` `main(String args[])``    ``{``        ``String str = ``"abcasdsabcae"``;``        ``if` `(function(str))``            ``System.out.print(``"Yes, both halves"``            ``+``" differ by at least one character"``);``        ``else``            ``System.out.print(``"No, both halves"``            ``+``" do not differ at all"``);``    ``}``}`

## Python3

 `# Python3 implementation to check if``# both halves of the string have``# at least one different character``MAX` `=` `26` `# Function which break string into two``# halves Increments frequency of characters``# for first half Decrements frequency of``# characters for second half true if any``# index has non-zero value``def` `function(st):``    ``global` `MAX``    ``l ``=` `len``(st)``    ` `    ``# Declaration and initialization``    ``# of counter array``    ``counter ``=` `[``0``] ``*` `MAX``    ` `    ``for` `i ``in` `range``(l ``/``/` `2``):``        ``counter[``ord``(st[i]) ``-` `ord``(``'a'``)] ``+``=` `1``        ` `    ``for` `i ``in` `range``(l ``/``/` `2``, l):``        ``counter[``ord``(st[i]) ``-` `ord``(``'a'``)] ``-``=` `1``        ` `    ``for` `i ``in` `range``(``MAX``):``        ``if` `(counter[i] !``=` `0``):``            ``return` `True``            ` `    ``return` `False` `# Driver function``st ``=` `"abcasdsabcae"``if` `function(st):``    ``print``(``"Yes, both halves differ by at "``,``          ``"least one character"``)``else``:``    ``print``(``"No, both halves do not differ at all"``)` `# This code is contributed by Ansu Kumari`

## C#

 `// C# implementation of the problem``using` `System;` `class` `GFG {` `    ``static` `int` `MAX = 26;` `    ``// Function which break string into``    ``// two halves Increments frequency``    ``// of characters for first half``    ``// Decrements frequency of characters``    ``// for second half true if any index``    ``// has non-zero value``    ``static` `bool` `function(String str)``    ``{``        ``int` `l = str.Length;` `        ``// Declaration and initialization``        ``// of counter array``        ``int` `[]counter = ``new` `int``[MAX];``        ``for` `(``int` `i = 0; i < MAX; i++)``            ``counter[i] = 0;``        ``for` `(``int` `i = 0; i < l / 2; i++)``            ``counter[str[i] - ``'a'``]++;``        ``for` `(``int` `i = l / 2; i < l; i++)``            ``counter[str[i] - ``'a'``]--;``        ``for` `(``int` `i = 0; i < MAX; i++)``            ``if` `(counter[i] != 0)``                ``return` `true``;``        ` `        ``return` `false``;``    ``}` `    ``// Driver function``    ``public` `static` `void` `Main()``    ``{``        ``string` `str = ``"abcasdsabcae"``;``        ``if` `(function(str))``        ``Console.Write(``"Yes, both halves"``            ``+ ``" differ by at least one "``                         ``+ ``"character"``);``        ``else``            ``Console.Write(``"No, both halves"``              ``+ ``" do not differ at all"``);``    ``}``}` `// This code is contributed by anuj_67.`

## Javascript

 ``

Output:

`Yes, both halves differ by at least one character`

The time complexity of both the approaches is linear, i.e. O(len)

Method 3: (No extra space)

• Input the string in form of character array
• Sort the two strings separately
• Traverse the two halves together, if these differ at any point, return true
to the calling function

## C++

 `// C++ implementation to check if``// both halves of the string have``// at least one different character``#include ``#include ``#include ``#include ``using` `namespace` `std;` `// Function which break string into two halves``// Sorts the two halves separately``// Compares the two halves``// return true if any index has non-zero value``bool` `function(``char` `str[])``{``    ``int` `l = ``strlen``(str);` `    ``// Declaration and initialization``    ``// of counter array``    ``sort(str, str + (l / 2));``    ``sort(str + (l / 2), str + l);``    ``for` `(``int` `i = 0; i < l / 2; i++)``        ``if` `(str[i] != str[l / 2 + i])``            ``return` `true``;``    ``return` `false``;``}` `// Driver function``int` `main()``{``    ``char` `str[] = ``"abcasdsabcae"``;``    ``if` `(function(str))``        ``cout << ``"Yes, both halves differ by"``             ``<<``" at least one character"``;``    ``else``        ``cout << ``"No, both halves do"``             ``<<``" not differ at all"``;``    ``return` `0;``}`

## Java

 `// Java implementation to check if``// both halves of the string have``// at least one different character` `import` `java.io.*;``import` `java.util.*;` `class` `GFG {` `// Function which break string into two halves``// Sorts the two halves separately``// Compares the two halves``// return true if any index has non-zero value``static` `Boolean function(``char` `str[])``{``    ``int` `l = str.length;` `    ``// Declaration and initialization``    ``// of counter array``    ``Arrays.sort(str, ``0``, (l / ``2``));``    ``Arrays.sort(str,(l / ``2``), l);``    ``for` `(``int` `i = ``0``; i < l / ``2``; i++)``        ``if` `(str[i] != str[l / ``2` `+ i])``            ``return` `true``;``    ``return` `false``;``}` `    ``public` `static` `void` `main (String[] args) {``    ``char` `str[] = (``"abcasdsabcae"``).toCharArray();``    ``if` `(function(str))``        ``System.out.println(``"Yes, both halves differ"``        ``+ ``" by at least one character"``);``    ``else``        ``System.out.println(``"No, both halves do"``        ``+ ``" not differ at all"``);``    ``}``}` `// This code is contributed by Gitanjali.`

## Python3

 `# Python implementation to check if``# both halves of the string have``# at least one different character` `# Function which break string into two halves``# Sorts the two halves separately``# Compares the two halves``# return true if any index has non-zero value``def` `function(st):``    ``st ``=` `list``(st)``    ``l ``=` `len``(st)` `    ``# Declaration and initialization``    ``# of counter array``    ``st[:l``/``/``2``] ``=` `sorted``(st[:l``/``/``2``])``    ``st[l``/``/``2``:] ``=` `sorted``(st[l``/``/``2``:])``    ``for` `i ``in` `range``(l``/``/``2``):``        ``if` `(st[i] !``=` `st[l``/``/``2` `+` `i]):``            ``return` `True``    ``return` `False` `# Driver function``st ``=` `"abcasdsabcae"``if` `function(st): ``print``(``"Yes, both halves differ "``,``                       ``"by at least one character"``)``else``: ``print``(``"No, both halves do not differ at all"``)` `# This code is contributed by Ansu Kumari`

## C#

 `// C# implementation to check if``// both halves of the string have``// at least one different character``using` `System;``    ` `class` `GFG``{` `// Function which break string into two halves``// Sorts the two halves separately``// Compares the two halves``// return true if any index has non-zero value``static` `Boolean function(``char` `[]str)``{``    ``int` `l = str.Length;` `    ``// Declaration and initialization``    ``// of counter array``    ``Array.Sort(str, 0, (l / 2));``    ``Array.Sort(str,(l / 2), l-(l/2));``    ``for` `(``int` `i = 0; i < l / 2; i++)``        ``if` `(str[i] != str[l / 2 + i])``            ``return` `true``;``    ``return` `false``;``}` `// Driver code``public` `static` `void` `Main (String[] args)``{``    ``char` `[]str = (``"abcasdsabcae"``).ToCharArray();``    ``if` `(function(str))``        ``Console.WriteLine(``"Yes, both halves differ"``        ``+ ``" by at least one character"``);``    ``else``        ``Console.WriteLine(``"No, both halves do"``        ``+ ``" not differ at all"``);``}``}` `// This code contributed by Rajput-Ji`

## Javascript

 ``

Output:

`Yes, both halves differ by at least one character`

The complexity of the above approach is O(len log (len))

My Personal Notes arrow_drop_up