Open In App

Converting one string to other using append and delete last operations

Given an integer k and two strings str1 and str2 determine whether or not we can convert str1 to str2 by performing exactly k of the below operations on str1. 

  1. Append a lowercase English alphabetic letter to the end of the str1. 
  2. Delete the last character in str1 (Performing this operation on an empty string results in an empty string)

Examples: 



Input : k = 7, str1 = aba, str2 = aba
Output : Yes
(4 operations to convert str1 to an 
empty string(to make string empty we 
have to perform one more delete 
operation) and 3 append operations)

Input : k = 5, str1 = pqruvs, str2 = pqrxy 
Output : Yes
(3 delete operations and 2 append operations)

First of all we determine the common prefix of both strings and then depending upon the value of common prefix, str1.length, str2.length and k we can conclude result. Below are the cases.

Implementation:






// CPP Program to convert str1 to str2 in
// exactly k operations
#include <bits/stdc++.h>
using namespace std;
 
// Returns true if it is possible to convert
// str1 to str2 using k operations.
bool isConvertible(string str1, string str2,
                                      int k)
{
    // Case A (i)
    if ((str1.length() + str2.length()) < k)
        return true;
 
    // finding common length of both string
    int commonLength = 0;
    for (int i = 0; i < min(str1.length(),
                           str2.length()); i++) {
        if (str1[i] == str2[i])
            commonLength++;
        else
            break;
    }
 
    // Case A (ii)-
    if ((k - str1.length() - str2.length() +
                     2 * commonLength) % 2 == 0)
        return true;
 
    // Case B-
    return false;
}
 
// driver program
int main()
{
    string str1 = "geek", str2 = "geek";
    int k = 7;
    if (isConvertible(str1, str2, k))
       cout << "Yes";
    else
       cout << "No";
 
    str1 = "geeks",  str2 = "geek";
    k = 5;   
    cout << endl;
    if (isConvertible(str1, str2, k))
       cout << "Yes";
    else
       cout << "No";
    return 0;
}




// java Program to convert str1 to
// str2 in exactly k operations
import java.io.*;
 
class GFG {
     
    // Returns true if it is possible to convert
    // str1 to str2 using k operations.
    static boolean isConvertible(String str1, String str2,
                                                     int k)
    {
        // Case A (i)
        if ((str1.length() + str2.length()) < k)
            return true;
     
        // finding common length of both string
        int commonLength = 0;
        for (int i = 0; i < Math.min(str1.length(),
                                str2.length()); i++)
        {
            if (str1 == str2)
                commonLength++;
            else
                break;
        }
     
        // Case A (ii)-
        if ((k - str1.length() - str2.length() +
                     2 * commonLength) % 2 == 0)
            return true;
     
        // Case B
        return false;
    }
     
     
     
    // Driver program
    public static void main (String[] args)
    {
        String str1 = "geek";
        String str2 = "geek";
        int k = 7;
        if (isConvertible(str1, str2, k))
        System.out.println( "Yes");
        else
        System.out.println ( "No");
     
        str1 = "geeks";
        str2 = "geek";
        k = 5;
         
        if (isConvertible(str1, str2, k))
        System.out.println( "Yes");
        else
        System.out.println ( "No");
             
    }
}
 
// This code is contributed by vt_m.




# Python 3 Program to convert str1 to
# str2 in exactly k operations
 
# Returns true if it is possible to convert
# str1 to str2 using k operations.
def isConvertible(str1, str2, k):
     
    # Case A (i)
    if ((len(str1) + len(str2)) < k):
        return True
 
    # finding common length of both string
    commonLength = 0
    for i in range(0, min(len(str1),
                          len(str2)), 1):
        if (str1[i] == str2[i]):
            commonLength += 1
        else:
            break
 
    # Case A (ii)-
    if ((k - len(str1) - len(str2) + 2 *
                commonLength) % 2 == 0):
        return True
 
    # Case B-
    return False
 
# Driver Code
if __name__ == '__main__':
    str1 = "geek"
    str2 = "geek"
    k = 7
    if (isConvertible(str1, str2, k)):
        print("Yes")
    else:
        print("No")
 
    str1 = "geeks"
    str2 = "geek"
    k = 5
    if (isConvertible(str1, str2, k)):
        print("Yes")
    else:
        print("No")
 
# This code is contributed by
# Sanjit_Prasad




// C# Program to convert str1 to
// str2 in exactly k operations
using System;
 
class GFG {
     
    // Returns true if it is possible to convert
    // str1 to str2 using k operations.
    static bool isConvertible(string str1, string str2,
                                                    int k)
    {
        // Case A (i)
        if ((str1.Length + str2.Length) < k)
            return true;
     
        // finding common length of both string
        int commonLength = 0;
        for (int i = 0; i < Math.Min(str1.Length,
                                str2.Length); i++)
        {
            if (str1 == str2)
                commonLength++;
            else
                break;
        }
     
        // Case A (ii)-
        if ((k - str1.Length - str2.Length +
                    2 * commonLength) % 2 == 0)
            return true;
     
        // Case B
        return false;
    }
     
     
     
    // Driver program
    public static void Main ()
    {
        string str1 = "geek";
        string str2 = "geek";
        int k = 7;
        if (isConvertible(str1, str2, k))
        Console.WriteLine( "Yes");
        else
        Console.WriteLine ( "No");
     
        str1 = "geeks";
        str2 = "geek";
        k = 5;
         
        if (isConvertible(str1, str2, k))
        Console.WriteLine( "Yes");
        else
        Console.WriteLine ( "No");
             
    }
}
 
// This code is contributed by vt_m.




<?php
// PHP Program to convert str1 to str2 in
// exactly k operations
 
// Returns true if it is possible to convert
// str1 to str2 using k operations.
function isConvertible($str1, $str2, $k)
                                                 
{
    // Case A (i)
    if ((strlen($str1) + strlen($str2)) < $k)
        return true;
 
    // finding common length of both string
    $commonLength = 0;
    for ($i = 0; $i < min(strlen($str1),
                          strlen($str2)); $i++)
    {
        if ($str1 == $str2)
            $commonLength += 1;
        else
            break;
    }
 
    // Case A (ii)-
    if (($k - strlen($str1) - strlen($str2) +
                 2 * $commonLength) % 2 == 0)
        return true;
 
    // Case B
    return false;
}
 
 
// Driver Code
$str1 = "geek";
$str2 = "geek";
$k = 7;
 
if (isConvertible($str1, $str2, $k))
    echo "Yes" . "\n";
else
    echo "No" . "\n";
 
$str1 = "geeks";
$str2 = "geek";
$k = 5;
 
if (isConvertible($str1, $str2, $k))
    echo "Yes" . "\n";
else
    echo "No" . "\n";
     
// This code is contributed by
// Mukul Singh
?>




<script>
 
// Javascript Program to convert str1 to str2 in
// exactly k operations
 
// Returns true if it is possible to convert
// str1 to str2 using k operations.
function isConvertible(str1, str2, k)
{
    // Case A (i)
    if ((str1.length + str2.length) < k)
        return true;
 
    // finding common length of both string
    var commonLength = 0;
    for (var i = 0; i < Math.min(str1.length,
                           str2.length); i++) {
        if (str1[i] == str2[i])
            commonLength++;
        else
            break;
    }
 
    // Case A (ii)-
    if ((k - str1.length - str2.length +
                     2 * commonLength) % 2 == 0)
        return true;
 
    // Case B-
    return false;
}
 
// driver program
var str1 = "geek", str2 = "geek";
var k = 7;
if (isConvertible(str1, str2, k))
   document.write( "Yes");
else
   document.write( "No");
str1 = "geeks",  str2 = "geek";
k = 5;   
document.write("<br>");
if (isConvertible(str1, str2, k))
   document.write( "Yes");
else
   document.write("No");
 
// This code is contributed by noob2000.
</script>

Output: 
No
Yes

 

Time Complexity: O(n)
Auxiliary Space: O(1) 


Article Tags :