📌  相关文章
📜  检查连接给定字符串后是否可以生成给定字符串

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

检查连接给定字符串后是否可以生成给定字符串

给定三个字符串strAB 。任务是检查str = A + B还是str = B + A其中+表示连接。
例子:

方法:

  1. 如果len(str) != len(A) + len(B)则不可能通过连接a + bb + a来生成str
  2. 否则检查str是否以a开头并以b结尾,或者它是否以b开头并以a结尾。如果其中任何一个为真,则打印Yes else print No

下面是上述方法的实现:

C++
// C++ implementation of the approach
#include 
using namespace std;
 
// Function that return true
// if pre is a prefix of str
bool startsWith(string str, string pre)
{
    int strLen = str.length();
    int preLen = pre.length();
    int i = 0, j = 0;
 
    // While there are characters to match
    while (i < strLen && j < preLen) {
 
        // If characters differ at any position
        if (str[i] != pre[j])
            return false;
        i++;
        j++;
    }
 
    // str starts with pre
    return true;
}
 
// Function that return true
// if suff is a suffix of str
bool endsWith(string str, string suff)
{
    int i = str.length() - 0;
    int j = suff.length() - 0;
 
    // While there are characters to match
    while (i >= 0 && j >= 0) {
 
        // If characters differ at any position
        if (str[i] != suff[j])
            return false;
        i--;
        j--;
    }
 
    // str ends with suff
    return true;
}
 
// Function that returns true
// if str = a + b or str = b + a
bool checkString(string str, string a, string b)
{
 
    // str cannot be generated
    // by concatenating a and b
    if (str.length() != a.length() + b.length())
        return false;
 
    // If str starts with a
    // i.e. a is a prefix of str
    if (startsWith(str, a)) {
 
        // Check if the rest of the characters
        // are equal to b i.e. b is a suffix of str
        if (endsWith(str, b))
            return true;
    }
 
    // If str starts with b
    // i.e. b is a prefix of str
    if (startsWith(str, b)) {
 
        // Check if the rest of the characters
        // are equal to a i.e. a is a suffix of str
        if (endsWith(str, a))
            return true;
    }
 
    return false;
}
 
// Driver code
int main()
{
    string str = "GeeksforGeeks";
    string a = "Geeksfo";
    string b = "rGeeks";
 
    if (checkString(str, a, b))
        cout << "Yes";
    else
        cout << "No";
 
    return 0;
}


Java
// Java implementation of the approach
import java.util.*;
 
class GFG
{
     
// Function that return true
// if pre is a prefix of str
static boolean startsWith(String str, String pre)
{
    int strLen = str.length();
    int preLen = pre.length();
    int i = 0, j = 0;
 
    // While there are characters to match
    while (i < strLen && j < preLen)
    {
 
        // If characters differ at any position
        if (str.charAt(i) != pre.charAt(j))
            return false;
        i++;
        j++;
    }
 
    // str starts with pre
    return true;
}
 
// Function that return true
// if suff is a suffix of str
static boolean endsWith(String str, String suff)
{
    int i = str.length() - 1;
    int j = suff.length() - 1;
 
    // While there are characters to match
    while (i >= 0 && j >= 0)
    {
 
        // If characters differ at any position
        if (str.charAt(i) != suff.charAt(j))
            return false;
        i--;
        j--;
    }
 
    // str ends with suff
    return true;
}
 
// Function that returns true
// if str = a + b or str = b + a
static boolean checkString(String str, String a, String b)
{
 
    // str cannot be generated
    // by concatenating a and b
    if (str.length() != a.length() + b.length())
        return false;
 
    // If str starts with a
    // i.e. a is a prefix of str
    if (startsWith(str, a))
    {
 
        // Check if the rest of the characters
        // are equal to b i.e. b is a suffix of str
        if (endsWith(str, b))
            return true;
    }
 
    // If str starts with b
    // i.e. b is a prefix of str
    if (startsWith(str, b))
    {
 
        // Check if the rest of the characters
        // are equal to a i.e. a is a suffix of str
        if (endsWith(str, a))
            return true;
    }
 
    return false;
}
 
// Driver code
public static void main(String args[])
{
    String str = "GeeksforGeeks";
    String a = "Geeksfo";
    String b = "rGeeks";
 
    if (checkString(str, a, b))
        System.out.println("Yes");
    else
        System.out.println("No");
 
}
}
 
// This code is contributed by Arnab Kundu


Python3
# Python3 implementation of the approach
 
# Function that return true
# if pre is a prefix of str
def startsWith(str, pre):
    strLen = len(str)
    preLen = len(pre)
    i = 0
    j = 0
     
    # While there are characters to match
    while (i < strLen and j < preLen):
         
        # If characters differ at any position
        if (str[i] != pre[j]) :
            return False
        i += 1
        j += 1
         
    # str starts with pre
    return True
     
# Function that return true
# if suff is a suffix of str
def endsWith(str, suff):
    i = len(str) - 1
    j = len(suff) - 1
     
    # While there are characters to match
    while (i >= 0 and j >= 0):
         
        # If characters differ at any position
        if (str[i] != suff[j]):
            return False
        i -= 1
        j -= 1
     
    # str ends with suff
    return True
 
# Function that returns true
# if str = a + b or str = b + a
def checkString(str, a, b):
     
    # str cannot be generated
    # by concatenating a and b
    if (len(str) != len(a) + len(b)):
        return False
         
    # If str starts with a
    # i.e. a is a prefix of str
    if (startsWith(str, a)):
 
        # Check if the rest of the characters
        # are equal to b i.e. b is a suffix of str
        if (endsWith(str, b)):
            return True
     
    # If str starts with b
    # i.e. b is a prefix of str
    if (startsWith(str, b)):
         
        # Check if the rest of the characters
        # are equal to a i.e. a is a suffix of str
        if (endsWith(str, a)):
            return True
     
    return False
     
# Driver code
str = "GeeksforGeeks"
a = "Geeksfo"
b = "rGeeks"
 
if (checkString(str, a, b)):
    print("Yes")
else:
    print("No")
 
# This code is contributed by SHUBHAMSINGH10


C#
// C# implementation of the approach
using System;
 
class GFG
{
     
// Function that return true
// if pre is a prefix of str
static Boolean startsWith(String str,
                          String pre)
{
    int strLen = str.Length;
    int preLen = pre.Length;
    int i = 0, j = 0;
 
    // While there are characters to match
    while (i < strLen && j < preLen)
    {
 
        // If characters differ at any position
        if (str[i] != pre[j])
            return false;
        i++;
        j++;
    }
 
    // str starts with pre
    return true;
}
 
// Function that return true
// if suff is a suffix of str
static Boolean endsWith(String str,
                        String suff)
{
    int i = str.Length - 1;
    int j = suff.Length - 1;
 
    // While there are characters to match
    while (i >= 0 && j >= 0)
    {
 
        // If characters differ at any position
        if (str[i] != suff[j])
            return false;
        i--;
        j--;
    }
 
    // str ends with suff
    return true;
}
 
// Function that returns true
// if str = a + b or str = b + a
static Boolean checkString(String str,
                           String a,
                           String b)
{
 
    // str cannot be generated
    // by concatenating a and b
    if (str.Length != a.Length + b.Length)
        return false;
 
    // If str starts with a
    // i.e. a is a prefix of str
    if (startsWith(str, a))
    {
 
        // Check if the rest of the characters
        // are equal to b i.e. b is a suffix of str
        if (endsWith(str, b))
            return true;
    }
 
    // If str starts with b
    // i.e. b is a prefix of str
    if (startsWith(str, b))
    {
 
        // Check if the rest of the characters
        // are equal to a i.e. a is a suffix of str
        if (endsWith(str, a))
            return true;
    }
 
    return false;
}
 
// Driver code
public static void Main(String []args)
{
    String str = "GeeksforGeeks";
    String a = "Geeksfo";
    String b = "rGeeks";
 
    if (checkString(str, a, b))
        Console.WriteLine("Yes");
    else
        Console.WriteLine("No");
}
}
 
// This code is contributed by 29AjayKumar


PHP
= 0 && $j >= 0)
    {
 
        // I$f characters differ at any position
        if ($str[$i] != $suff[$j])
            return false;
        $i--;
        $j--;
    }
 
    // str ends with suff
    return true;
}
 
// Function that returns true
// if str = a + b or str = b + a
function checkString($str, $a, $b)
{
 
    // str cannot be generated
    // by concatenating a and b
    if (strlen($str) != strlen($a) + strlen($b))
        return false;
 
    // If str starts with a
    // i.e. a is a prefix of str
    if (startsWith($str, $a))
    {
 
        // Check if the rest of the characters
        // are equal to b i.e. b is a suffix of str
        if (endsWith($str, $b))
            return true;
    }
 
    // If str starts with b
    // i.e. b is a prefix of str
    if (startsWith($str, $b))
    {
 
        // Check if the rest of the characters
        // are equal to a i.e. a is a suffix of str
        if (endsWith($str, $a))
            return true;
    }
 
    return false;
}
 
// Driver code
$str = "GeeksforGeeks";
$a = "Geeksfo";
$b = "rGeeks";
 
if (checkString($str, $a, $b))
    echo "Yes";
else
    echo "No";
 
// This code is contributed by AnkitRai01
?>


Javascript


输出:
Yes

时间复杂度: O(N)