Dadas tres strings str , A y B . La tarea es verificar si str = A + B o str = B + A donde + denota concatenación.
Ejemplos:
Entrada: str = “GeeksforGeeks”, A = “Geeksfo”, B = “rGeeks”
Salida: Sí
str = A + B = “Geeksfo” + “rGeeks” = “GeeksforGeeks”
Entrada: str = “Delhicapitals”, B = “ Delmi”, C = “mayúsculas”
Salida: No
Acercarse:
- Si len(str) != len(A) + len(B) entonces no es posible generar str concatenando a + b o b + a .
- De lo contrario, verifique si str comienza con a y termina con b o si comienza con b y termina con a . Escriba Sí , si alguno de estos es cierto, de lo contrario, escriba No
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ implementation of the approach #include <bits/stdc++.h> 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
<?php // PHP implementation of the approach // Function that return true // if pre is a prefix of str function startsWith($str, $pre) { $strLen = strlen($str); $preLen = strlen($pre); $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 function endsWith($str, $suff) { $i = strlen($str)- 0; $j = strlen($suff)- 0; // While there are characters to match while ($i >= 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
<script> // JavaScript implementation of the approach // Function that return true // if pre is a prefix of str function startsWith(str, pre) { let strLen = str.length; let preLen = pre.length; let 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 function endsWith(str, suff) { let i = str.length - 1; let 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 function checkString(str, a, 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; } let str = "GeeksforGeeks"; let a = "Geeksfo"; let b = "rGeeks"; if (checkString(str, a, b)) document.write("Yes"); else document.write("No"); </script>
Yes
Complejidad de tiempo: O(max(a,b,c)), ya que estamos usando un ciclo para atravesar tiempos a, b y c. Donde a, b y c son la longitud de las cuerdas.
Espacio auxiliar: O(1), ya que no estamos utilizando ningún espacio adicional.
Publicación traducida automáticamente
Artículo escrito por sharadgoyal y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA