Thursday, July 4, 2024
HomeData ModellingData Structure & AlgorithmCheck if S can be converted to Target in M steps by...

Check if S can be converted to Target in M steps by replacing each digit with its product with X

Given two numeric strings S and Target, and integers X, M. The task is to check if string S can be converted into string Target using the below operation:

  • In one operation it is required to replace each digit in S with its product with X, i.e S[i] = (S[I]*X).
  • The above operation has to be done exactly M times.

Examples:

Input: S = “1234”, Target = “2550525100”, X = 5, M = 2
Output: YES
Explanation:
Initially S=1234
After the 1st, level S becomes =5101520
After the 2nd level, S=2550525100
Thus, we are able to make Target string So print YES
Input: S = “53783”, Target = “2893653”, X = 2, M = 3
Output: NO

 

Approach: This is an implementation-based problem simply traverse from left to right and multiply X in every digit which is present in the original string. Perform this M times with the given string S and check if it is possible to convert original string S into Target string.

Below is the implementation of the above approach: 

C++




// C++ program to check
// If strings are Equal or not
 
#include <bits/stdc++.h>
using namespace std;
 
void makestring(string S, string Target, int X, int M)
{
    // Out of X and M if any one
    // having value zero then just compare
    // original string To Target string
    if (X == 0 || M == 0) {
        if (S == Target) {
            cout << "YES" << endl;
        }
    }
    else {
        vector<string> v1;
        for (int i = 0; i < S.length(); i++) {
 
            // character to integer
            int val = S[i] - '0';
 
            // convert into string
            string a = to_string(val);
            v1.push_back(a);
        }
        while (M--) {
            vector<string> v;
            for (int i = 0; i < v1.size(); i++) {
                for (int j = 0; j < v1[i].size(); j++) {
 
                    int temp = v1[i][j] - '0';
 
                    // multiply X into given integer
                    temp = temp * X;
 
                    v.push_back(to_string(temp));
                }
            }
            v1 = v;
        }
 
        // Store all character from vector
        // of string into temp string
        string temp = "";
        for (int i = 0; i < v1.size(); i++) {
            for (int j = 0; j < v1[i].size(); j++) {
                temp.push_back(v1[i][j]);
            }
        }
 
        // Compare both Target and temp
        if (temp == Target) {
            cout << "YES" << endl;
        }
        else {
            cout << "NO" << endl;
        }
    }
}
 
// Driver Code
int main()
{
    string S = "1234";
    string Target = "2550525100";
    int X = 5;
    int M = 2;
    makestring(S, Target, X, M);
    return 0;
}


Java




import java.util.*;
import java.io.*;
 
// Java program for the above approach
class GFG{
 
  static void makestring(String S, String Target, int X, int M)
  {
     
    // Out of X and M if any one
    // having value zero then just compare
    // original String To Target String
    if (X == 0 || M == 0) {
      if (S == Target) {
        System.out.println("YES");
      }
    }
    else {
      ArrayList<String> v1 = new ArrayList<String>();
      for (int i = 0 ; i < S.length() ; i++) {
 
        // character to integer
        int val = (int)S.charAt(i) - (int)'0';
 
        // convert into String
        String a = Integer.toString(val);
        v1.add(a);
      }
      while (M > 0) {
        ArrayList<String> v = new ArrayList<String>();
        for (int i = 0 ; i < v1.size() ; i++) {
          for (int j = 0; j < v1.get(i).length() ; j++) {
 
            int temp = (int)v1.get(i).charAt(j) - (int)'0';
 
            // multiply X into given integer
            temp = temp * X;
 
            v.add(Integer.toString(temp));
          }
        }
        v1 = v;
        M -= 1;
      }
 
      // Store all character from vector
      // of String into temp String
      String temp = "";
      for (int i = 0 ; i < v1.size() ; i++) {
        for (int j = 0 ; j < v1.get(i).length() ; j++) {
          temp+=v1.get(i).charAt(j);
        }
      }
 
      // Compare both Target and temp
      if (temp.equals(Target)) {
        System.out.println("YES");
      }
      else {
        System.out.println("NO");
      }
    }
  }
 
  // Driver Code
  public static void main(String args[])
  {
    String S = "1234";
    String Target = "2550525100";
    int X = 5;
    int M = 2;
    makestring(S, Target, X, M);
  }
}
 
// This code is contributed by subhamgoyal2014.


Python3




# Python program to check
# If strings are Equal or not
def makestring(S, Target, X, M):
 
    # Out of X and M if any one
    # having value zero then just compare
    # original string To Target string
    if (X == 0 or M == 0):
        if (S == Target):
            print("YES")
    else:
        v1 = []
        for i in range(len(S)):
 
            # character to integer
            val = ord(S[i]) - ord('0')
 
            # convert into string
            a = str(val)
            v1.append(a)
        while (M):
            v = []
            for i in range(len(v1)):
                for j in range(len(v1[i])):
 
                    temp = ord(v1[i][j]) - ord('0')
 
                    # multiply X into given integer
                    temp = temp * X
 
                    v.append(str(temp))
            M -= 1
            v1 = v.copy()
 
        # Store all character from vector
        # of string into temp string
        temp = ""
        for i in range(len(v1)):
            for j in range(len(v1[i])):
                temp += v1[i][j]
 
        # Compare both Target and temp
        if (temp == Target):
            print("YES")
        else:
            print("NO")
 
# Driver Code
S = "1234"
Target = "2550525100"
X = 5
M = 2
 
makestring(S, Target, X, M)
 
# This code is contributed by shinjanpatra


C#




// C# program for the above approach
using System;
using System.Collections.Generic;
 
class GFG
{
 
  static void makestring(String S, String Target, int X, int M)
  {
 
    // Out of X and M if any one
    // having value zero then just compare
    // original String To Target String
    if (X == 0 || M == 0)
    {
      if (S == Target)
      {
        Console.WriteLine("YES");
      }
    }
    else
    {
      List<String> v1 = new List<String>();
      for (int i = 0; i < S.Length; i++)
      {
 
        // character to integer
        int val = (int)S[i] - (int)'0';
 
        // convert into String
        String a = val.ToString();
        v1.Add(a);
      }
      while (M > 0)
      {
        List<String> v = new List<String>();
        for (int i = 0; i < v1.Count; i++)
        {
          for (int j = 0; j < v1[i].Length; j++)
          {
 
            int _temp = (int)v1[i][j] - (int)'0';
 
            // multiply X into given integer
            _temp = _temp * X;
 
            v.Add(_temp.ToString());
          }
        }
        v1 = v;
        M -= 1;
      }
 
      // Store all character from vector
      // of String into temp String
      String temp = "";
      for (int i = 0; i < v1.Count; i++)
      {
        for (int j = 0; j < v1[i].Length; j++)
        {
          temp += v1[i][j];
        }
      }
 
      // Compare both Target and temp
      if (temp.Equals(Target))
      {
        Console.WriteLine("YES");
      }
      else
      {
        Console.WriteLine("NO");
      }
    }
  }
 
  // Driver Code
  public static void Main()
  {
    String S = "1234";
    String Target = "2550525100";
    int X = 5;
    int M = 2;
    makestring(S, Target, X, M);
  }
}
 
// This code is contributed by Saurabh Jaiswal.


Javascript




<script>
    // JavaScript program to check
    // If strings are Equal or not
    const makestring = (S, Target, X, M) => {
     
        // Out of X and M if any one
        // having value zero then just compare
        // original string To Target string
        if (X == 0 || M == 0) {
            if (S == Target) {
                document.write("YES<br/>");
            }
        }
        else {
            let v1 = [];
            for (let i = 0; i < S.length; i++) {
 
                // character to integer
                let val = S.charCodeAt(i) - '0'.charCodeAt(0);
 
                // convert into string
                let a = (val).toString();
                v1.push(a);
            }
            while (M--) {
                let v = [];
                for (let i = 0; i < v1.length; i++) {
                    for (let j = 0; j < v1[i].length; j++) {
 
                        let temp = v1[i].charCodeAt(j) - '0'.charCodeAt(0);
 
                        // multiply X into given integer
                        temp = temp * X;
 
                        v.push(temp.toString());
                    }
                }
                v1 = [...v];
            }
 
            // Store all character from vector
            // of string into temp string
            let temp = "";
            for (let i = 0; i < v1.length; i++) {
                for (let j = 0; j < v1[i].length; j++) {
                    temp += v1[i][j];
                }
            }
 
            // Compare both Target and temp
            if (temp == Target) {
                document.write("YES<br/>");
            }
            else {
                document.write("NO<br/>");
            }
        }
    }
 
    // Driver Code
    let S = "1234";
    let Target = "2550525100";
    let X = 5;
    let M = 2;
 
    makestring(S, Target, X, M);
 
    // This code is contributed by rakeshsahni
 
</script>


 
 

Output

YES

 

Time Complexity: O(N* N* M)
Auxiliary Space: O(1)

 

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

Commit to GfG’s Three-90 Challenge! Purchase a course, complete 90% in 90 days, and save 90% cost click here to explore.

Last Updated :
13 Mar, 2023
Like Article
Save Article


Previous

<!–

8 Min Read | Java

–>


Next


<!–

8 Min Read | Java

–>

Share your thoughts in the comments

Nango Kalahttps://www.kala.co.za
Experienced Support Engineer with a demonstrated history of working in the information technology and services industry. Skilled in Microsoft Excel, Customer Service, Microsoft Word, Technical Support, and Microsoft Office. Strong information technology professional with a Microsoft Certificate Solutions Expert (Privet Cloud) focused in Information Technology from Broadband Collage Of Technology.
RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments