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.
a) Append a lowercase English alphabetic letter to the end of the str1.
b) 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.
CASE A: Cases where we can change str1 to str2 :

  • If str1.length + str2.length <= k then we can delete str1 completely and re-construct str2 easily.
  • If [k-(str1.length-prefix.length + str2.length-prefix.length)] is even then we can easily construct str2 from str1. This is because str1.length-prefix.length is number of letter to be deleted and str2.length-prefix.length is number of letter to be added in str1 after deletion of uncommon letter. After this if the operations left is even then we can add and remove any random letter which cost even number of operations.

CASE B: In rest of all cases we cannot construct str2 from str1.

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Output:

No
Yes


My Personal Notes arrow_drop_up

Discovering ways to develop a plane for soaring career goals

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.



Improved By : Sanjit_Prasad, Code_Mech



Article Tags :
Practice Tags :


1


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.