Check if String can be generated by concatenating character or String itself Last Updated : 10 Jan, 2023 Comments Improve Suggest changes Like Article Like Report Given a target string S consisting of lowercase alphabets, the task is to make this string by performing some operation on an empty string such that: The first operation is to append a lower case alphabet to string S and The second operation is to append a copy of S to itself. Note: The first operation cannot be used continuously two times. Examples: Input: S = "xxyxxy"Output: Yes Explanation: First append 'x' to the empty string S. Now S = ''x''.Use second operation. The string will be S = "xx".Append 'y' with the string. Then current string is "xxy".At last perform operation 2 to get the given string which is "xxyxxy". Hence it is possible to make the given string S after performing operations. Input: S = ''bee'' Output: No Approach: The problem can be solved based on the following observation: Observations: The first type of operation can be applied when the string is empty or immediately after an operation of the second type has been performed on the string. After every operation of the second type, the length of the resulting string is even. Therefore the operation of the first type can only be applied when the length of the string is even and finally results in an odd length string.This means if the length of the string is even then the last operation performed on it has to be of the second type otherwise if the length of the string is odd the last operation performed on it has to be of the first type. Follow the steps mentioned below to implement the above idea: Start with the given string and keep on moving until the string becomes empty:If the size of the present string is odd, Remove the last character of the string (operation of the first type).If the size of the present string is even, Check whether this string is the copy of two equal strings (operation of the second type) and reduce the size of the string by half. If the present string can’t be obtained by a single operation of the second type then stop iterating.If the string is empty at the end then it can be constructed using these operations otherwise it cannot be built using these operations. Below is the implementation of the above approach. C++ // C++ code to implement the approach #include <bits/stdc++.h> using namespace std; // Function to check whether given string // is possible to make it from empty // string after performing operation void checkString(string A, int N) { while (N != 0) { int mid = N / 2; if (N % 2 == 0) { if (A.substr(0, mid) == A.substr(mid)) { A = A.substr(0, mid); N = mid; } else { break; } } else { if (A.substr(0, mid) == A.substr(mid, N - 1 - mid)) { A = A.substr(0, mid); N = mid; } else { break; } } } if (N == 0 || N == 1) cout << "Yes\n"; else cout << "No\n"; } // Driver Code int main() { string S = "xxyxxy"; int N = S.length(); // Function call checkString(S, N); return 0; } // This code is contributed by Rohit Pradhan Java // Java code to implement the approach import java.io.*; import java.util.*; class GFG { // Function to check whether given string // is possible to make it from empty // string after performing operation public static void checkString(String A, int N) { while (N != 0) { int mid = N / 2; if (N % 2 == 0) { if (A.substring(0, mid).equals( A.substring(mid))) { A = A.substring(0, mid); N = mid; } else { break; } } else { if (A.substring(0, mid).equals( A.substring(mid, N - 1))) { A = A.substring(0, mid); N = mid; } else { break; } } } if (N == 0 || N == 1) System.out.println("Yes"); else System.out.println("No"); } // Driver code public static void main(String[] args) { String S = "xxyxxy"; int N = S.length(); // Function call checkString(S, N); } } Python3 # Function to check whether given string # is possible to make it from empty # string after performing operation def checkString(A, N): while N != 0: mid = N // 2 if N % 2 == 0: if A[0:mid] == A[mid:]: A = A[0:mid] N = mid else: break else: if A[0:mid] == A[mid:N-1]: A = A[0:mid] N = mid else: break if N == 0 or N == 1: print("Yes") else: print("No") # Driver Code S = "xxyxxy" N = len(S) # Function call checkString(S, N) # This code is contributed by Tapesh(tapeshdua420) C# // C# program to of the above approach using System; using System.Linq; using System.Collections; using System.Collections.Generic; class GFG { // Function to check whether given string // is possible to make it from empty // string after performing operation public static void checkString(string A, int N) { while (N != 0) { int mid = N / 2; if (N % 2 == 0) { if (A.Substring(0, mid).Equals( A.Substring(mid))) { A = A.Substring(0, mid); N = mid; } else { break; } } else { if (A.Substring(0, mid).Equals( A.Substring(mid, N - 1))) { A = A.Substring(0, mid); N = mid; } else { break; } } } if (N == 0 || N == 1) Console.Write("No"); else Console.Write("Yes"); } // Driver Code public static void Main() { string S = "xxyxxy"; int N = S.Length; // Function call checkString(S, N); } } // This code is contributed by sanjoy_62. JavaScript <script> // JavaScript code to implement the approach // Function to check whether given string // is possible to make it from empty // string after performing operation const checkString = (A, N) => { while (N != 0) { let mid = parseInt(N / 2); if (N % 2 == 0) { if (A.substring(0, mid) == A.substring(mid)) { A = A.substring(0, mid); N = mid; } else { break; } } else { if (A.substring(0, mid) == A.substring(mid, N - 1 - mid + mid)) { A = A.substring(0, mid); N = mid; } else { break; } } } if (N == 0 || N == 1) document.write("Yes\n"); else document.write("No\n"); } // Driver Code let S = "xxyxxy"; let N = S.length; // Function call checkString(S, N); // This code is contributed by rakeshsahni </script> OutputYes Time Complexity: O(log2 N), as binary search approach is used.Auxiliary Space: O(1) Comment More infoAdvertise with us Next Article Check if String can be generated by concatenating character or String itself aarohirai2616 Follow Improve Article Tags : Strings Greedy Competitive Programming DSA substring +1 More Practice Tags : GreedyStrings Similar Reads Check if a string is concatenation of another given string Given two strings str1 and str2 of length N and M respectively, the task is to check if the string str1 can be formed by concatenating the string str2 repetitively or not. Examples: Input: str1 = âabcabcabcâ, str2 = âabcâOutput: YesExplanation: Concatenating the string str2 thrice generates the stri 7 min read Check whether given string can be generated after concatenating given strings Given three strings str, A and B. The task is to check whether str = A + B or str = B + A where + denotes concatenation. Examples: Input: str = "GeeksforGeeks", A = "Geeksfo", B = "rGeeks" Output: Yes str = A + B = "Geeksfo" + "rGeeks" = "GeeksforGeeks"Input: str = "Delhicapitals", B = "Delmi", C = 11 min read Maximize length of the String by concatenating characters from an Array of Strings Find the largest possible string of distinct characters formed using a combination of given strings. Any given string has to be chosen completely or not to be chosen at all. Examples: Input: strings ="abcd", "efgh", "efgh" Output: 8Explanation: All possible combinations are {"", "abcd", "efgh", "abc 12 min read Check whether second string can be formed from characters of first string Given two strings str1 and str2, check if str2 can be formed from str1 Example : Input : str1 = geekforgeeks, str2 = geeksOutput : YesHere, string2 can be formed from string1. Input : str1 = geekforgeeks, str2 = andOutput : NoHere string2 cannot be formed from string1. Input : str1 = geekforgeeks, s 5 min read Check if a two character string can be made using given words Given a string of two characters and n distinct words of two characters. The task is to find if it is possible to arrange given words in such a way that the concatenated string has the given two character string as a substring. We can append a word multiple times. Examples: Input : str = "ya" words[ 6 min read Generate a string consisting of characters 'a' and 'b' that satisfy the given conditions Given two integers A and B, the task is to generate and print a string str such that: str must only contain the characters 'a' and 'b'.str has length A + B and the occurrence of the character 'a' is equal to A and the occurrence of character 'b' is equal to BThe sub-strings "aaa" or "bbb" must not o 6 min read Generate two output strings depending upon occurrence of character in input string. Given an input string str[], generate two output strings. One of which consists of those character which occurs only once in input string and second which consists of multi-time occurring characters. Output strings must be sorted.Examples: Input : str[] = "geeksforgeeks"Output : String with characte 7 min read Check if Rotated Concatenated Strings are valid or not Given a string s formed by concatenating another string s1 to itself, followed by a rotation to the left any number of times, the task is to determine whether a given string s is valid, indicating whether it can be formed from the original string s1. Examples: Input: s = "abcabc"Output: 1Explanation 5 min read Check if a string is a scrambled form of another string Given two strings s1 and s2 of equal length, the task is to determine if s2 is a scrambled version of s1.A scrambled string is formed by recursively splitting the string into two non-empty substrings and rearranging them randomly (s = x + y or s = y + x) and then recursively scramble the two substri 15+ min read Difference between concatenation of strings using (str += s) and (str = str + s) A string is a collection of characters. For example, "GeeksforGeeks" is a string. C++ provides primitive data types to create a string. The string can also be initialized at the time of declaration. Syntax: string str; string str = "GeeksforGeeks" Here, "GeeksforGeeks" is a string literal. This arti 15+ min read Like