Check whether two strings contain same characters in same order (original) (raw)

Last Updated : 19 Dec, 2022

Given two strings s1 and s2, the task is to find whether the two strings 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

Try It Yourselfredirect icon

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 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

`

Time Complexity: O(m + n)
Auxiliary Space: O(m + n), where m and n are the length of the given strings s1 and s2 respectively.

Using Recursion

C++ `

#include

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

`

Time complexity: O(max(M, N)) for strings of length M and N respectively.
Auxiliary Space: O(max(M, N)), due to recursive call stacks.