给定三个长度相等的字符串A 、 B和C ,任务是找到可以执行的交换操作的最小数量,使得当任何交换只能用C完成时,字符串A和B变得相等。
例子:
Input: A = “xyz”, B = “yzx”, C = “yzx”
Output: 3
Explanation:
Swap all the characters of string C with string A one by one
Input: A = “pqr”, B = “stu”, C = “vwx”
Output: -1
Explanation
It’s impossible to make strings A and B equal, even by using C
方法:由于字符串的长度是相等的,这个想法是遍历字符串并检查存在于字符串的字符。
对于每个索引“i”,会发生以下情况:
- 如果字符串是一个给定索引处的字符是一样的B中的字符,那么我们就可以继续检查下一个字符。
- 如果字符串A和B是给定的索引处的字符不相等,那么我们检查,如果在字符串B和C或A和C的字符是相等的,并且相应地,我们交换这些字符。
- 如果以上条件都不满足,那么就不可能使字符串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