Skip to content
Related Articles

Related Articles

Check whether two strings contain same characters in same order

View Discussion
Improve Article
Save Article
Like Article
  • Difficulty Level : Medium
  • Last Updated : 27 Sep, 2021

Given two strings s1 and s2, the task is to find whether the two string contain the same characters that occur in the same order. For example: string “Geeks” and string “Geks” contain the same characters in same order.

Examples: 

Input: s1 = “Geeks”, s2 = “Geks” 
Output: Yes

Input: s1 = “Arnab”, s2 = “Andrew” 
Output: No 

Approach: We have two strings now we have to check whether the strings contain the same characters in the same order. So we will replace the contiguous similar element with a single element i.e. if we have “eee”, we will replace it with a single “e”. Now we will check that both the strings are equal or not. If equal then print Yes else No

Below is the implementation of the above approach: 

C++




// C++ implementation of the approach
#include <iostream>
using namespace std;
 
string getString(char x)
{
    // string class has a constructor
    // that allows us to specify size of
    // string as first parameter and character
    // to be filled in given size as second
    // parameter.
    string s(1, x);
 
    return s;
}
 
// Function that returns true if
// the given strings contain same
// characters in same order
bool solve(string s1, string s2)
{
    // Get the first character of both strings
    string a = getString(s1[0]), b = getString(s2[0]);
 
    // Now if there are adjacent similar character
    // remove that character from s1
    for (int i = 1; i < s1.length(); i++)
        if (s1[i] != s1[i - 1]) {
            a += getString(s1[i]);
        }
 
    // Now if there are adjacent similar character
    // remove that character from s2
    for (int i = 1; i < s2.length(); i++)
        if (s2[i] != s2[i - 1]) {
            b += getString(s2[i]);
        }
 
    // If both the strings are equal
    // then return true
    if (a == b)
        return true;
 
    return false;
}
 
// Driver code
int main()
{
    string s1 = "Geeks", s2 = "Geks";
 
    if (solve(s1, s2))
        cout << "Yes";
    else
        cout << "No";
 
    return 0;
}

Java




// Java implementation of the approach
class temp
{
static String getString(char x)
{
 
    // String class has a constructor
    // that allows us to specify size of
    // String as first parameter and character
    // to be filled in given size as second
    // parameter.
    String s = String.valueOf(x);
    return s;
}
 
// Function that returns true if
// the given Strings contain same
// characters in same order
static boolean solve(String s1, String s2)
{
    // Get the first character of both Strings
    String a = getString(s1.charAt(0)),
           b = getString(s2.charAt(0));
 
    // Now if there are adjacent similar character
    // remove that character from s1
    for (int i = 1; i < s1.length(); i++)
        if (s1.charAt(i) != s1.charAt(i - 1))
        {
            a += getString(s1.charAt(i));
        }
 
    // Now if there are adjacent similar character
    // remove that character from s2
    for (int i = 1; i < s2.length(); i++)
        if (s2.charAt(i) != s2.charAt(i - 1))
        {
            b += getString(s2.charAt(i));
        }
 
    // If both the Strings are equal
    // then return true
    if (a.equals(b))
        return true;
 
    return false;
}
 
// Driver code
public static void main(String[] args)
{
    String s1 = "Geeks", s2 = "Geks";
 
    if (solve(s1, s2))
        System.out.print("Yes");
    else
        System.out.print("No");
}
}
 
// This code is contributed by ankush_953

Python3




# Python3 implementation of the approach
 
def getString(x):
 
    # string class has a constructor
    # that allows us to specify the size of
    # string as first parameter and character
    # to be filled in given size as the second
    # parameter.
    return x
 
# Function that returns true if
# the given strings contain same
# characters in same order
def solve(s1, s2):
 
    # Get the first character of both strings
    a = getString(s1[0])
    b = getString(s2[0])
 
    # Now if there are adjacent similar character
    # remove that character from s1
    for i in range(1, len(s1)):
        if s1[i] != s1[i - 1]:
            a += getString(s1[i])
         
    # Now if there are adjacent similar character
    # remove that character from s2
    for i in range(1, len(s2)):
        if s2[i] != s2[i - 1]:
            b += getString(s2[i])
         
    # If both the strings are equal
    # then return true
    if a == b:
        return True
    return False
 
# Driver code
s1 = "Geeks"
s2 = "Geks"
if solve(s1, s2):
    print("Yes")
else:
    print("No")
 
# This code is contributed by ankush_953

C#




// C# implementation of the approach
using System;
     
public class temp
{
     
static String getString(char x)
{
 
    // String class has a constructor
    // that allows us to specify size of
    // String as first parameter and character
    // to be filled in given size as second
    // parameter.
    String s = String.Join("",x);
    return s;
}
 
// Function that returns true if
// the given Strings contain same
// characters in same order
static Boolean solve(String s1, String s2)
{
    // Get the first character of both Strings
    String a = getString(s1[0]),
        b = getString(s2[0]);
 
    // Now if there are adjacent similar character
    // remove that character from s1
    for (int i = 1; i < s1.Length; i++)
        if (s1[i] != s1[i - 1]) {
            a += getString(s1[i]);
        }
 
    // Now if there are adjacent similar character
    // remove that character from s2
    for (int i = 1; i < s2.Length; i++)
        if (s2[i] != s2[i - 1]) {
            b += getString(s2[i]);
        }
 
    // If both the strings are equal
    // then return true
    if (a == b)
        return true;
 
    return false;
}
 
// Driver code
public static void Main(String[] args)
{
    String s1 = "Geeks", s2 = "Geks";
 
    if (solve(s1, s2))
        Console.Write("Yes");
    else
        Console.Write("No");
}
}
 
// This code is contributed by Princi Singh

Javascript




<script>
 
// Javascript implementation of the approach
 
function getString(x)
{
    // string class has a constructor
    // that allows us to specify size of
    // string as first parameter and character
    // to be filled in given size as second
    // parameter.
    return x
}
 
// Function that returns true if
// the given strings contain same
// characters in same order
function solve(s1, s2)
{
    // Get the first character of both strings
    var a = getString(s1[0]), b = getString(s2[0]);
 
    // Now if there are adjacent similar character
    // remove that character from s1
    for (var i = 1; i < s1.length; i++)
        if (s1[i] != s1[i - 1]) {
            a += getString(s1[i]);
        }
 
    // Now if there are adjacent similar character
    // remove that character from s2
    for (var i = 1; i < s2.length; i++)
        if (s2[i] != s2[i - 1]) {
            b += getString(s2[i]);
        }
 
    // If both the strings are equal
    // then return true
    if (a == b)
        return true;
 
    return false;
}
 
// Driver code
var s1 = "Geeks", s2 = "Geks";
if (solve(s1, s2))
    document.write( "Yes");
else
    document.write( "No");
 
 
// This code is contributed by rutvik_56.
</script>

Output: 

Yes

 

Using Recursion

C++




#include <iostream>
 
using namespace std;
bool checkSequence(string a, string b)
{
      // if length of the b = 0
      // then we return true
      if(b.size() == 0)
        return true;
   
      // if length of a = 0
      // that means b is not present in
      // a so we return false
    if(a.size() == 0)
        return false;
 
    if(a[0] == b[0])
        return checkSequence(a.substr(1), b.substr(1));
    else
        return checkSequence(a.substr(1), b);
}
 
int main()
{
    string s1 = "Geeks", s2 = "Geks";
 
    if (checkSequence(s1, s2))
        cout << "Yes";
    else
        cout << "No";
}
 
// This code is contributed by SoumikMondal

Java




/*package whatever //do not write package name here */
 
import java.io.*;
 
class GFG {
      public static boolean checkSequence(String a, String b) {
          //if length of the b = 0
          //then we return true
          if(b.length()==0)
            return true;
       
          //if length of a = 0
          //that means b is not present in
          //a so we return false
        if(a.length() == 0)
            return false;
         
        if(a.charAt(0) == b.charAt(0))
            return checkSequence(a.substring(1), b.substring(1));
        else
            return checkSequence(a.substring(1), b);
    }
    public static void main(String[] args)
    {
        String s1 = "Geeks", s2 = "Geks";
   
        if (checkSequence(s1, s2))
            System.out.print("Yes");
        else
            System.out.print("No");
    }
}

Python




# Python3 implementation of approach
def checkSequence(a,  b):
 
    # if length of the b = 0
    # then we return true
    if len(b) == 0:
        return True
 
    # if length of a = 0
    # that means b is not present in
    # a so we return false
    if len(a) == 0:
        return False
 
    if(a[0] == b[0]):
        return checkSequence(a[1:], b[1:])
    else:
        return checkSequence(a[1:], b)
 
 
if __name__ == '__main__':
    s1 = "Geeks"
    s2 = "Geks"
 
    if (checkSequence(s1, s2)):
        print("Yes")
    else:
        print("No")
 
 
# This code is contributed by nirajgusain5

C#




// C# implementation of the approach
using System;
     
public class temp
{
public static bool checkSequence(String a, String b)
{
   
          // if length of the b = 0
          // then we return true
          if(b.Length == 0)
            return true;
       
          // if length of a = 0
          // that means b is not present in
          // a so we return false
        if(a.Length == 0)
            return false;
         
        if(a[0] == b[0])
            return checkSequence(a.Substring(1), b.Substring(1));
        else
            return checkSequence(a.Substring(1), b);
    }
 
// Driver code
public static void Main(String[] args)
{
    String s1 = "Geeks", s2 = "Geks";
 
    if (checkSequence(s1, s2))
        Console.Write("Yes");
    else
        Console.Write("No");
}
}
 
// This code is contributed by Dharanendra L V.

Javascript




<script>
 
function checkSequence(a, b)
{
     
    // If length of the b = 0
    // then we return true
    if (b.length == 0)
        return true;
     
    // If length of a = 0
    // that means b is not present in
    // a so we return false
    if (a.length == 0)
        return false;
     
    if (a[0] == b[0])
        return checkSequence(a.substring(1),
                             b.substring(1));
    else
        return checkSequence(a.substring(1), b);
}
 
// Driver code
let s1 = "Geeks", s2 = "Geks";
 
if (checkSequence(s1, s2))
    document.write("Yes");
else
    document.write("No");
     
// This code is contributed by mukesh07
 
</script>

Output:

Yes


My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!