📌  相关文章
📜  通过仅与第三个字符串交换使两个字符串相等的最小交换

📅  最后修改于: 2021-09-03 04:17:50             🧑  作者: Mango

给定三个长度相等的字符串ABC ,任务是找到可以执行的交换操作的最小数量,使得当任何交换只能用C完成时,字符串AB变得相等。

例子:

方法:由于字符串的长度是相等的,这个想法是遍历字符串并检查存在于字符串的字符。
对于每个索引“i”,会发生以下情况:

  1. 如果字符串是一个给定索引处的字符是一样的B中的字符,那么我们就可以继续检查下一个字符。
  2. 如果字符串A和B是给定的索引处的字符不相等,那么我们检查,如果在字符串B和CA和C的字符是相等的,并且相应地,我们交换这些字符。
  3. 如果以上条件都不满足,那么就不可能使字符串A 和 B 相等。

下面是上述方法的实现:

C++
// C++ implementation to find the
// minimum number of swaps to make
// two strings equal
 
#include 
using namespace std;
 
// Function to swap the characters
void swap(char& x, char& y)
{
    char temp = x;
    x = y;
    y = temp;
}
 
// Function to find the minimum number of swaps
// to make two strings equal
void swapOperations(string a, string b, string c)
{
    // Counting length of string
    int l = a.length();
    int i = 0;
 
    // Initializing the answer
    int total_swaps = 0;
 
    // For loop to iterate through the
    // given strings
    for (i = 0; i < l; i++) {
 
        // Condition if both character of
        // string a and b are equal
        if (a[i] == b[i])
            continue;
 
        // Condition if character of
        // string a and c are equal
        if (a[i] == c[i]) {
 
            // If yes, then swap
            // the characters
            swap(b[i], c[i]);
            total_swaps++;
            continue;
        }
 
        // Condition if character of
        // string b and c are equal
        if (b[i] == c[i]) {
 
            // If yes, then swap
            // the characters
            swap(a[i], c[i]);
            total_swaps++;
            continue;
        }
 
        // Else, it is impossible to make
        // both the strings equal
        break;
    }
 
    // Printing the answer
    if (i == l)
        cout << total_swaps << endl;
    else
        cout << -1 << endl;
}
 
// Driver Code
int main()
{
    string a = "xyz";
    string b = "yzx";
    string c = "yzx";
 
    swapOperations(a, b, c);
 
    return 0;
}


Java
// Java implementation to find the
// minimum number of swaps to make
// two strings equal
class GFG {
     
    // Function to find the minimum number of swaps
    // to make two strings equal
    static void swapOperations(char []a, char []b, char []c)
    {
        // Counting length of string
        int l = a.length;
        int i = 0;
     
        // Initializing the answer
        int total_swaps = 0;
        char temp;
     
        // For loop to iterate through the
        // given strings
        for (i = 0; i < l; i++) {
     
            // Condition if both character of
            // string a and b are equal
            if (a[i] == b[i])
                continue;
     
            // Condition if character of
            // string a and c are equal
            if (a[i] == c[i]) {
     
                // If yes, then swap
                // the characters
                //    swap(b[i], c[i]);
                temp = b[i];
                b[i] = c[i];
                c[i] = temp;
                 
                total_swaps++;
                continue;
            }
     
            // Condition if character of
            // string b and c are equal
            if (b[i] == c[i]) {
     
                // If yes, then swap
                // the characters
                //swap(a[i], c[i]);
                temp = a[i];
                a[i] = c[i];
                c[i] = temp;
                 
                total_swaps++;
                continue;
            }
     
            // Else, it is impossible to make
            // both the strings equal
            break;
        }
     
        // Printing the answer
        if (i == l)
                System.out.println(total_swaps) ;
        else
                System.out.println(-1) ;
    }
     
    // Driver Code
    public static void main (String[] args)
    {
        String a = "xyz";
        String b = "yzx";
        String c = "yzx";
     
        swapOperations(a.toCharArray(), b.toCharArray(), c.toCharArray());
     
    }
}
 
// This code is contributed by Yash_R


Python3
# Python3 implementation to find the
# minimum number of swaps to make
# two strings equal
 
# Function to find the minimum number of swaps
# to make two strings equal
def swapOperations(a, b, c) :
 
    # Counting length of string
    l = len(a);
    i = 0;
 
    # Initializing the answer
    total_swaps = 0;
 
    # For loop to iterate through the
    # given strings
    for i in range(l) :
 
        # Condition if both character of
        # string a and b are equal
        if (a[i] == b[i]) :
            continue;
 
        # Condition if character of
        # string a and c are equal
        if (a[i] == c[i]) :
 
            # If yes, then swap
            # the characters
            #swap(b[i], c[i]);
            b[i], c[i] = c[i], b[i];
            total_swaps += 1;
            continue;
 
        # Condition if character of
        # string b and c are equal
        if (b[i] == c[i]) :
 
            # If yes, then swap
            # the characters
            # swap(a[i], c[i]);
            a[i], c[i] = c[i], a[i];
            total_swaps += 1;
            continue;
 
        # Else, it is impossible to make
        # both the strings equal
        break;
     
    i += 1;
 
    # Printing the answer
    if (i == l) :
        print(total_swaps) ;
    else :
        print(-1);
 
# Driver Code
if __name__ == "__main__" :
 
    a = "xyz";
    b = "yzx";
    c = "yzx";
 
    swapOperations(list(a), list(b), list(c));
 
# This code is contributed by AnkitRai01


C#
// C# implementation to find the
// minimum number of swaps to make
// two strings equal
using System;
 
class GFG {
     
    // Function to find the minimum number of swaps
    // to make two strings equal
    static void swapOperations(char []a, char []b, char []c)
    {
        // Counting length of string
        int l = a.Length;
        int i = 0;
     
        // Initializing the answer
        int total_swaps = 0;
        char temp;
     
        // For loop to iterate through the
        // given strings
        for (i = 0; i < l; i++) {
     
            // Condition if both character of
            // string a and b are equal
            if (a[i] == b[i])
                continue;
     
            // Condition if character of
            // string a and c are equal
            if (a[i] == c[i]) {
     
                // If yes, then swap
                // the characters
                //    swap(b[i], c[i]);
                temp = b[i];
                b[i] = c[i];
                c[i] = temp;
                 
                total_swaps++;
                continue;
            }
     
            // Condition if character of
            // string b and c are equal
            if (b[i] == c[i]) {
     
                // If yes, then swap
                // the characters
                //swap(a[i], c[i]);
                temp = a[i];
                a[i] = c[i];
                c[i] = temp;
                 
                total_swaps++;
                continue;
            }
     
            // Else, it is impossible to make
            // both the strings equal
            break;
        }
     
        // Printing the answer
        if (i == l)
                Console.WriteLine(total_swaps) ;
        else
                Console.WriteLine(-1) ;
    }
     
    // Driver Code
    public static void Main(string[] args)
    {
        string a = "xyz";
        string b = "yzx";
        string c = "yzx";
     
        swapOperations(a.ToCharArray(), b.ToCharArray(), c.ToCharArray());
     
    }
}
 
// This code is contributed by Yash_R


Javascript


输出:
3

如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live