Given two strings that can contain lower and uppercase alphabets, numbers and special characters like dots, blank spaces, commas, etc. Compare both strings considering only alphanumeric characters([a-b], [A-B] and [0-9]) if they are equal or not. For example, strings “Ram, Shyam” and “Ram-Shyam” both are the same and also “/.’;[]” and “@# >” are same.
Examples:
Input: str1 = "Ram, Shyam", str2 = " Ram - Shyam."
Output: Equal
Explanation:
if we ignore all characters
except alphanumeric characters
then strings will be,
str1 = "RamShyam" and str2 = "RamShyam".
Therefore both strings are equal.
Input : str1 = "aaa123", str2 = "@aaa-12-3"
Output : Equal
Input : str1 = "abc123", str2 = "123abc"
Output : Unequal
Explanation:
In this, str1 = "abc123" and str2 = "123abc".
Therefore both strings are not equal.
Since we have to compare only alphanumeric characters therefore whenever any other character is found simply ignore it by increasing iterator pointer. For doing it simply take two integer variables i and j and initialize them by 0. Now run a loop to compare each and every character of both strings. Compare one by one if the character is alphanumeric otherwise increase the value of i or j by one.
Below is the implementation of the above approach:
C++
#include <iostream>
using namespace std;
bool CompareAlphanumeric(string& str1, string& str2)
{
int i, j;
i = 0;
j = 0;
int len1 = str1.size();
int len2 = str2.size();
while (i <= len1 && j <= len2) {
while (i < len1
&& (!((str1[i] >= 'a' && str1[i] <= 'z' )
|| (str1[i] >= 'A' && str1[i] <= 'Z' )
|| (str1[i] >= '0' && str1[i] <= '9' )))) {
i++;
}
while (j < len2
&& (!((str2[j] >= 'a' && str2[j] <= 'z' )
|| (str2[j] >= 'A' && str2[j] <= 'Z' )
|| (str2[j] >= '0' && str2[j] <= '9' )))) {
j++;
}
if (i == len1 && j == len2)
return true ;
else if (str1[i] != str2[j])
return false ;
else {
i++;
j++;
}
}
return false ;
}
void CompareAlphanumericUtil(string str1, string str2)
{
bool res;
res = CompareAlphanumeric(str1, str2);
if (res == true )
cout << "Equal" << endl;
else
cout << "Unequal" << endl;
}
int main()
{
string str1, str2;
str1 = "Ram, Shyam" ;
str2 = " Ram - Shyam." ;
CompareAlphanumericUtil(str1, str2);
str1 = "abc123" ;
str2 = "123abc" ;
CompareAlphanumericUtil(str1, str2);
return 0;
}
|
Java
import java.util.*;
class GFG
{
static boolean CompareAlphanumeric( char [] str1,
char [] str2)
{
int i, j;
i = 0 ;
j = 0 ;
int len1 = str1.length;
int len2 = str2.length;
while (i <= len1 && j <= len2)
{
while (i < len1 && (!((str1[i] >= 'a' && str1[i] <= 'z' ) ||
(str1[i] >= 'A' && str1[i] <= 'Z' ) ||
(str1[i] >= '0' && str1[i] <= '9' ))))
{
i++;
}
while (j < len2 && (!((str2[j] >= 'a' && str2[j] <= 'z' ) ||
(str2[j] >= 'A' && str2[j] <= 'Z' ) ||
(str2[j] >= '0' && str2[j] <= '9' ))))
{
j++;
}
if (i == len1 && j == len2)
{
return true ;
}
else if (str1[i] != str2[j])
{
return false ;
}
else
{
i++;
j++;
}
}
return false ;
}
static void CompareAlphanumericUtil(String str1,
String str2)
{
boolean res;
res = CompareAlphanumeric(str1.toCharArray(),
str2.toCharArray());
if (res == true )
{
System.out.println( "Equal" );
}
else
{
System.out.println( "Unequal" );
}
}
public static void main(String[] args)
{
String str1, str2;
str1 = "Ram, Shyam" ;
str2 = " Ram - Shyam." ;
CompareAlphanumericUtil(str1, str2);
str1 = "abc123" ;
str2 = "123abc" ;
CompareAlphanumericUtil(str1, str2);
}
}
|
Python3
def CompareAlphanumeric(str1, str2):
i = 0
j = 0
len1 = len (str1)
len2 = len (str2)
while (i < = len1 and j < = len2):
while (i < len1 and
(((str1[i] > = 'a' and str1[i] < = 'z' ) or
(str1[i] > = 'A' and str1[i] < = 'Z' ) or
(str1[i] > = '0' and str1[i] < = '9' )) = = False )):
i + = 1
while (j < len2 and
(((str2[j] > = 'a' and str2[j] < = 'z' ) or
(str2[j] > = 'A' and str2[j] < = 'Z' ) or
(str2[j] > = '0' and str2[j] < = '9' )) = = False )):
j + = 1
if (i = = len1 and j = = len2):
return True
elif (str1[i] ! = str2[j]):
return False
else :
i + = 1
j + = 1
return False
def CompareAlphanumericUtil(str1, str2):
res = CompareAlphanumeric(str1, str2)
if (res = = True ):
print ( "Equal" )
else :
print ( "Unequal" )
if __name__ = = '__main__' :
str1 = "Ram, Shyam"
str2 = " Ram - Shyam."
CompareAlphanumericUtil(str1, str2)
str1 = "abc123"
str2 = "123abc"
CompareAlphanumericUtil(str1, str2)
|
C#
using System;
class GFG
{
static bool CompareAlphanumeric( char []str1,
char []str2)
{
int i, j;
i = 0;
j = 0;
int len1 = str1.Length;
int len2 = str2.Length;
while (i <= len1 && j <= len2)
{
while (i < len1 && (!((str1[i] >= 'a' && str1[i] <= 'z' ) ||
(str1[i] >= 'A' && str1[i] <= 'Z' ) ||
(str1[i] >= '0' && str1[i] <= '9' ))))
{
i++;
}
while (j < len2 && (!((str2[j] >= 'a' && str2[j] <= 'z' ) ||
(str2[j] >= 'A' && str2[j] <= 'Z' ) ||
(str2[j] >= '0' && str2[j] <= '9' ))))
{
j++;
}
if (i == len1 && j == len2)
{
return true ;
}
else if (str1[i] != str2[j])
{
return false ;
}
else
{
i++;
j++;
}
}
return false ;
}
static void CompareAlphanumericUtil( string str1,
string str2)
{
bool res;
res = CompareAlphanumeric(str1.ToCharArray(),
str2.ToCharArray());
if (res == true )
{
Console.WriteLine( "Equal" );
}
else
{
Console.WriteLine( "Unequal" );
}
}
public static void Main()
{
string str1, str2;
str1 = "Ram, Shyam" ;
str2 = " Ram - Shyam." ;
CompareAlphanumericUtil(str1, str2);
str1 = "abc123" ;
str2 = "123abc" ;
CompareAlphanumericUtil(str1, str2);
}
}
|
Javascript
<script>
function CompareAlphanumeric(str1, str2)
{
let i, j;
i = 0;
j = 0;
let len1 = str1.length;
let len2 = str2.length;
while (i <= len1 && j <= len2)
{
while (i < len1 &&
(!((str1[i].charCodeAt() >= 'a' .charCodeAt() &&
str1[i].charCodeAt() <= 'z' .charCodeAt()) ||
(str1[i].charCodeAt() >= 'A' .charCodeAt() &&
str1[i].charCodeAt() <= 'Z' .charCodeAt()) ||
(str1[i].charCodeAt() >= '0' .charCodeAt() &&
str1[i].charCodeAt() <= '9' .charCodeAt()))))
{
i++;
}
while (j < len2 &&
(!((str2[j].charCodeAt() >= 'a' .charCodeAt() &&
str2[j].charCodeAt() <= 'z' .charCodeAt()) ||
(str2[j].charCodeAt() >= 'A' .charCodeAt() &&
str2[j].charCodeAt() <= 'Z' .charCodeAt()) ||
(str2[j].charCodeAt() >= '0' .charCodeAt() &&
str2[j].charCodeAt() <= '9' .charCodeAt()))))
{
j++;
}
if (i == len1 && j == len2)
{
return true ;
}
else if (str1[i] != str2[j])
{
return false ;
}
else
{
i++;
j++;
}
}
return false ;
}
function CompareAlphanumericUtil(str1, str2)
{
let res;
res = CompareAlphanumeric(str1.split( '' ),
str2.split( '' ));
if (res == true )
{
document.write( "Equal" + "</br>" );
}
else
{
document.write( "Unequal" );
}
}
let str1, str2;
str1 = "Ram, Shyam" ;
str2 = " Ram - Shyam." ;
CompareAlphanumericUtil(str1, str2);
str1 = "abc123" ;
str2 = "123abc" ;
CompareAlphanumericUtil(str1, str2);
</script>
|
Time Complexity: O(n*n)
Auxiliary Space: O(1), as no extra space is required
Feeling lost in the world of random DSA topics, wasting time without progress? It's time for a change! Join our DSA course, where we'll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 geeks!
Last Updated :
23 Jun, 2022
Like Article
Save Article