Check whether two strings contain same characters in same order - GeeksforGeeks

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++
Java
Python3
C#
Javascript
// 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 orderbool 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 codeint main(){    string s1 = "Geeks", s2 = "Geks";     if (solve(s1, s2))        cout << "Yes";    else        cout << "No";     return 0;}
// Java implementation of the approachclass 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 orderstatic 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 codepublic 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 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 orderdef 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 codes1 = "Geeks"s2 = "Geks"if solve(s1, s2):    print("Yes")else:    print("No") # This code is contributed by ankush_953
// C# implementation of the approachusing 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 orderstatic 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 codepublic 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
<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 orderfunction 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 codevar s1 = "Geeks", s2 = "Geks";if (solve(s1, s2))    document.write( "Yes");else    document.write( "No");  // This code is contributed by rutvik_56.</script>
Yes
 
Using Recursion
C++
Java
Python
C#
Javascript
#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
/*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");    }}
# Python3 implementation of approachdef 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# implementation of the approachusing 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 codepublic 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.
<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 codelet s1 = "Geeks", s2 = "Geks"; if (checkSequence(s1, s2))    document.write("Yes");else    document.write("No");     // This code is contributed by mukesh07 </script>
Output:
Yes
ankush_953
princi singh
Code_Mech
le0
SoumikMondal
rutvik_56
mukesh07
nirajgusain5
dharanendralv23
lexicographic-ordering
Competitive Programming
Pattern Searching
Strings
test_cat_june
Strings
Pattern Searching
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Top 15 Websites for Coding Challenges and Competitions
Breadth First Traversal ( BFS ) on a 2D array
Shortest path in a directed graph by Dijkstra’s algorithm
Count of strings whose prefix match with the given string to a given length k
Runtime Errors
KMP Algorithm for Pattern Searching
Rabin-Karp Algorithm for Pattern Searching
Naive algorithm for Pattern Searching
Check if a string is substring of another
Boyer Moore Algorithm for Pattern Searching