📌  相关文章
📜  交错两个没有公共字符的给定字符串

📅  最后修改于: 2022-05-13 01:57:08.036000             🧑  作者: Mango

交错两个没有公共字符的给定字符串

给定三个字符串A、B 和 C。编写一个函数来检查 C 是否是 A 和 B 的交错。可以假设 A 和 B 之间没有公共字符(有关处理公共字符的扩展解决方案,请参阅this同样),如果 C 包含 A 和 B 的所有字符并且单个字符串中所有字符的顺序被保留,则称 C 是交错的 A 和 B。有关示例,请参见上一篇文章。
解决方案:
一个接一个地选择 C 的每个字符,并将其与 A 中的第一个字符匹配。如果不匹配,则将其与 B 的第一个字符匹配。如果它甚至不匹配 B 的第一个字符,则返回 false。如果字符与A的第一个字符匹配,则从C的第二个字符,A的第二个字符和B的第一个字符重复上述过程。如果C的第一个字符与B的第一个字符匹配(并且不匹配A) 的第一个字符,然后从 C 的第二个字符、A 的第一个字符和 B 的第二个字符重复上述过程。如果 C 的所有字符都与 A 的字符或 B 的字符匹配,并且 C 的长度为A和B的长度之和,则C是交错的A和B。

C++
// C++ program to check if given string is
// an interleaving of the other two strings
#include 
using namespace std;
 
// Returns true if C is an interleaving of A and B,
// otherwise returns false
bool isInterleaved (char A[], char B[], char C[])
{
    // Iterate through all characters of C.
    while (*C != 0)
    {
        // Match first character of C with first character
        // of A. If matches them move A to next
        if (*A == *C)
            A++;
 
        // Else Match first character of C with first
        // character of B. If matches them move B to next
        else if (*B == *C)
            B++;
 
        // If doesn't match with either A or B, then return
        // false
        else
            return false;
         
        // Move C to next for next iteration
        C++;
    }
 
    // If A or B still have some characters, then length of
    // C is smaller than sum of lengths of A and B, so
    // return false
    if (*A || *B)
        return false;
 
    return true;
}
 
// Driver program to test above functions
int main()
{
    char A[] = "AB";
    char B[] = "CD";
    char C[] = "ACBG";
    if (isInterleaved(A, B, C) == true)
        cout << C << " is interleaved of " << A << " and " << B;
    else
        cout << C << " is not interleaved of " << A << " and " << B;
 
    return 0;
}
 
// This is code is contributed by rathbhupendra


C
// C program to check if given string is an interleaving
// of the other two strings
#include
 
// Returns true if C is an interleaving of A and B,
// otherwise returns false
bool isInterleaved (char *A, char *B, char *C)
{
    // Iterate through all characters of C.
    while (*C != 0)
    {
        // Match first character of C with first character
        // of A. If matches them move A to next
        if (*A == *C)
            A++;
 
        // Else Match first character of C with first
        // character of B. If matches them move B to next
        else if (*B == *C)
            B++;
  
        // If doesn't match with either A or B, then return
        // false
        else
            return false;
         
        // Move C to next for next iteration
        C++;
    }
 
    // If A or B still have some characters, then length of
    // C  is smaller than sum of lengths of A and B, so
    // return false
    if (*A || *B)
        return false;
 
    return true;
}
 
// Driver program to test above functions
int main()
{
    char *A = "AB";
    char *B = "CD";
    char *C = "ACBG";
    if (isInterleaved(A, B, C) == true)
        printf("%s is interleaved of %s and %s", C, A, B);
    else
        printf("%s is not interleaved of %s and %s", C, A, B);
 
    return 0;
}
 
// This code is contributed by Venkat


Java
// Java program to check if the given string is
// an interleaving of the other two strings
public class GfG{
 
    // Returns true if C is an interleaving
    // of A and B, otherwise returns false
    static boolean isInterleaved (String A, String B, String C)
    {
        int i = 0, j = 0, k = 0;
         
        // Iterate through all characters of C.
        while (k != C.length())
        {
            // Match first character of C with first character
            // of A. If matches them move A to next
            if (i


Python3
# Python3 program to check if given string is an interleaving of
# the other two strings
 
# Returns true if C is an interleaving of A and B, otherwise
# returns false
def isInterleaved(A, B, C):
 
    # Utility variables
    i = 0
    j = 0
    k = 0
 
    # Iterate through all characters of C.
    while k != len(C)-1:
 
        # Match first character of C with first character of A,
        # If matches them move A to next
        if i


C#
// C# program to check if the given string is
// an interleaving of the other two strings
using System;
 
class GfG
{
 
    // Returns true if C is an interleaving
    // of A and B, otherwise returns false
    static bool isInterleaved (String A, String B, String C)
    {
        int i = 0, j = 0, k = 0;
         
        // Iterate through all characters of C.
        while (k != C.Length - 1)
        {
            // Match first character of C with first character
            // of A. If matches them move A to next
            if (A[i] == C[k])
                i++;
     
            // Else Match first character of C with first
            // character of B. If matches them move B to next
            else if (B[j] == C[k])
                j++;
     
            // If doesn't match with either A or B, then return
            // false
            else
                return false;
             
            // Move C to next for next iteration
            k++;
        }
     
        // If A or B still have some characters,
        // then length of C is smaller than sum
        // of lengths of A and B, so return false
        if (i < A.Length || j < B.Length)
            return false;
     
        return true;
    }
 
    // Driver code
    public static void Main(String []args)
    {
         
        String A = "AB";
        String B = "CD";
        String C = "ACBG";
        if (isInterleaved(A, B, C) == true)
            Console.WriteLine("{0} is interleaved of {1} and {2}", C, A, B);
        else
            Console.WriteLine("{0} is not interleaved of {1} and {2}", C, A, B);
    }
}
 
// This code contributed by Rajput-Ji


PHP


Javascript


输出:

ACBG is not interleaved of AB and CD