Skip to content
Related Articles

Related Articles

Check whether the string S1 can be made equal to S2 with the given operation
  • Last Updated : 29 Apr, 2020

Given two string S1 and S2, the task is to check whether both the strings can be made equal by performing the given operation on string S1. In a single operation, any character at an odd index can be swapped with any other character at an odd index, the same goes for the characters at even indices.

Examples:

Input: S1 = “abcd”, S2 = “cbad”
Output: Yes
Swap ‘a’ and ‘c’ in S1 and the resultant
string is equal to S2.

Input: S1 = “abcd”, S2 = “abcdcd”
Output: No

Approach:

  • Create a string even_s1 from the characters at even indices from S1.
  • Similarly, generate the strings even_s2, odd_s1 and odd_s2.
  • Sort all the four strings from the previous steps.
  • If even_s1 = even_s2 and odd_s1 = odd_s2 then print Yes.
  • Else print No as the strings cannot be made equal.

Below is the implementation of the above approach:

C++




// CPP implementation of the approach
#include<bits/stdc++.h>
using namespace std;
  
// Function to return the string formed 
// by the odd indexed characters of s
string partOdd(string s)
{
    string st = "";
    for(int i = 0; i < s.length(); i++)
    {
        if (i % 2 != 0)
        st += s[i];
    }
    return st;
}
  
// Function to return the string formed 
// by the even indexed characters of s
string partEven(string str)
{
    string s = "";
    for(int i = 0; i < str.length(); i++)
    {
        if (i % 2 == 0)
        s += str[i];
    }
    return s;
}
  
// Function that returns true if s1 
// can be made equal to s2 
// with the given operation
bool canBeMadeEqual(string s1, string s2)
{
      
    // Get the string formed by the 
    // even indexed characters of s1
    string even_s1 = partEven(s1);
      
      
    // Get the string formed by the 
    // even indexed characters of s2
    string even_s2 = partEven(s2);
      
    // Get the string formed by the 
    // odd indexed characters of s1
    string odd_s1 = partOdd(s1);
      
    // Get the string formed by the 
    // odd indexed characters of s2
    string odd_s2 = partOdd(s2);
  
    // Sorting all the lists
    sort(even_s1.begin(), even_s1.end());
    sort(even_s2.begin(), even_s2.end());
    sort(odd_s1.begin(), odd_s1.end());
    sort(odd_s2.begin(), odd_s2.end());
  
    // If the strings can be made equal
    if (even_s1 == even_s2 and odd_s1 == odd_s2)
        return true;
      
    return false;
}
  
// Driver code 
int main()
{
    string s1 = "cdab";
    string s2 = "abcd";
    if(canBeMadeEqual(s1, s2))
        cout << "Yes" << endl;
    else
        cout << "No" << endl;
}
  
// This code is contributed by Surendra_Gangwar

Java




// Java implementation of the approach
import java.util.*;
  
class GFG 
{
  
    // Function to return the string formed
    // by the odd indexed characters of s
    static String partOdd(String s) 
    {
        String st = "";
        for (int i = 0; i < s.length(); i++)
        {
            if (i % 2 != 0)
                st += s.charAt(i);
        }
  
        return st;
    }
  
    // Function to return the string formed
    // by the even indexed characters of s
    static String partEven(String str)
    {
        String s = "";
        for (int i = 0; i < str.length(); i++) 
        {
            if (i % 2 == 0)
                s += str.charAt(i);
        }
        return s;
    }
  
    // Function that returns true if s1
    // can be made equal to s2
    // with the given operation
    static boolean canBeMadeEqual(String s1,
                                  String s2)
    {
  
        // Get the string formed by the
        // even indexed characters of s1
        char[] even1 = partEven(s1).toCharArray();
  
        // Get the string formed by the
        // even indexed characters of s2
        char[] even2 = partEven(s2).toCharArray();
  
        // Get the string formed by the
        // odd indexed characters of s1
        char[] odd1 = partOdd(s1).toCharArray();
  
        // Get the string formed by the
        // odd indexed characters of s2
        char[] odd2 = partOdd(s2).toCharArray();
  
        // Sorting all the lists
        Arrays.sort(even1);
        Arrays.sort(even2);
        Arrays.sort(odd1);
        Arrays.sort(odd2);
  
        String even_s1 = new String(even1);
        String even_s2 = new String(even2);
        String odd_s1 = new String(odd1);
        String odd_s2 = new String(odd2);
  
        // If the strings can be made equal
        if (even_s1.equals(even_s2) && 
             odd_s1.equals(odd_s2))
            return true;
        return false;
    }
  
    // Driver Code
    public static void main(String[] args)
    {
        String s1 = "cdab";
        String s2 = "abcd";
  
        if (canBeMadeEqual(s1, s2))
            System.out.println("Yes");
        else
            System.out.println("No");
    }
}
  
// This code is contributed by
// sanjeev2552

Python3




# Python3 implementation of the approach
  
# Function to return the string formed 
# by the odd indexed characters of s
def partOdd(s):
    odd = []
    for i in range(len(s)):
        if i % 2 != 0:
            odd.append(s[i])
    return odd
  
# Function to return the string formed 
# by the even indexed characters of s
def partEven(s):
    even = []
    for i in range(len(s)):
        if i % 2 == 0:
            even.append(s[i])
    return even
  
  
# Function that returns true if s1 
# can be made equal to s2 
# with the given operation
def canBeMadeEqual(s1, s2):
      
    # Get the string formed by the 
    # even indexed characters of s1
    even_s1 = partEven(s1)
      
      
    # Get the string formed by the 
    # even indexed characters of s2
    even_s2 = partEven(s2)
      
    # Get the string formed by the 
    # odd indexed characters of s1
    odd_s1 = partOdd(s1)
      
    # Get the string formed by the 
    # odd indexed characters of s2
    odd_s2 = partOdd(s2)
  
    # Sorting all the lists
    even_s1.sort()
    even_s2.sort()
    odd_s1.sort()
    odd_s2.sort()
  
    # If the strings can be made equal
    if even_s1 == even_s2 and odd_s1 == odd_s2:
        return True
      
    return False
  
  
# Driver code 
s1 = "cdab"
s2 = "abcd"
if canBeMadeEqual(s1, s2):
    print("Yes")
else:
    print("No")

C#




// C# implementation of the approach
using System;
  
class GFG 
{
  
    // Function to return the string formed
    // by the odd indexed characters of s
    static string partOdd(string s) 
    {
        string st = "";
        for (int i = 0; i < s.Length; i++)
        {
            if (i % 2 != 0)
                st += s[i];
        }
  
        return st;
    }
  
    // Function to return the string formed
    // by the even indexed characters of s
    static string partEven(string str)
    {
        string s = "";
        for (int i = 0; i < str.Length; i++) 
        {
            if (i % 2 == 0)
                s += str[i];
        }
        return s;
    }
  
    // Function that returns true if s1
    // can be made equal to s2
    // with the given operation
    static bool canBeMadeEqual(string s1,
                                string s2)
    {
  
        // Get the string formed by the
        // even indexed characters of s1
        char[] even1 = partEven(s1).ToCharArray();
  
        // Get the string formed by the
        // even indexed characters of s2
        char[] even2 = partEven(s2).ToCharArray();
  
        // Get the string formed by the
        // odd indexed characters of s1
        char[] odd1 = partOdd(s1).ToCharArray();
  
        // Get the string formed by the
        // odd indexed characters of s2
        char[] odd2 = partOdd(s2).ToCharArray();
  
        // Sorting all the lists
        Array.Sort(even1);
        Array.Sort(even2);
        Array.Sort(odd1);
        Array.Sort(odd2);
  
        string even_s1 = new string(even1);
        string even_s2 = new string(even2);
        string odd_s1 = new string(odd1);
        string odd_s2 = new string(odd2);
  
        // If the strings can be made equal
        if (even_s1.Equals(even_s2) && 
            odd_s1.Equals(odd_s2))
            return true;
        return false;
    }
  
    // Driver Code
    public static void Main()
    {
        string s1 = "cdab";
        string s2 = "abcd";
  
        if (canBeMadeEqual(s1, s2))
            Console.Write("Yes");
        else
            Console.Write("No");
    }
}
  
// This code is contributed by AbhiThakur
Output:
Yes



My Personal Notes arrow_drop_up
Recommended Articles
Page :