Check if a palindromic string can be obtained by concatenating substrings split from same indices of two given strings
Last Updated :
05 Apr, 2023
Given two strings A and B of length N, the task is to check if any of the two strings formed by splitting both the strings at any index i (0 ≤ i ≤ N - 1) and concatenating A[0, i] and B[i, N - 1] or A[i, N - 1] and B[0, i] respectively, form a palindromic string or not. If found to be true, print "Yes". Otherwise, print "No".
Examples:
Input: A = "x", B = "y"
Output: Yes
Explanation:
Let the string be splitted at index 0 then,
Split A from index 0: ""+"x" A[0, 0] = "" and A[1, 1] = "x".
Split B from index 0: ""+"y" B[0, 0] = "" and B[1, 1] = "y".
The concatenation of A[0, 0] and B[1, 1] is = "y" which is a palindromic string.
Input: A = "xbdef", B = "xecab"
Output: No
Approach: The idea is to use the Two Pointer Technique and traverse the string over the range [0, N - 1] and check if the concatenation of substrings A[0, i - 1] and B[i, N - 1] or the concatenation of substrings A[i, N - 1] and B[0, i - 1] is a palindromic or not. If any of the concatenation is found to be palindromic then print "Yes" else print "No".
Below is the implementation of the above approach:
C++
// C++ Program to implement
// the above approach
#include <bits/stdc++.h>
using namespace std;
// Function to check if a string
// is palindrome or not
bool isPalindrome(string str)
{
// Start and end of the
// string
int i = 0, j = str.size() - 1;
// Iterate the string
// until i > j
while (i < j)
{
// If there is a mismatch
if (str[i] != str[j])
return false;
// Increment first pointer
// and decrement the other
i++;
j--;
}
// Given string is a
// palindrome
return true;
}
// Function two check if
// the strings can be
// combined to form a palindrome
void formPalindrome(string a,
string b, int n)
{
// Initialize array of
// characters
char aa[n + 2];
char bb[n + 2];
for (int i = 0; i < n + 2; i++)
{
aa[i] = ' ';
bb[i] = ' ';
}
// Stores character of string
// in the character array
for (int i = 1; i <= n; i++)
{
aa[i] = a[i - 1];
bb[i] = b[i - 1];
}
bool ok = false;
for (int i = 0; i <= n + 1; i++)
{
// Find left and right parts
// of strings a and b
string la = "";
string ra = "";
string lb = "";
string rb = "";
for (int j = 1; j <= i - 1; j++)
{
// Substring a[j...i-1]
if (aa[j] == ' ')
la += "";
else
la += aa[j];
// Substring b[j...i-1]
if (bb[j] == ' ')
lb += "";
else
lb += bb[j];
}
for (int j = i; j <= n + 1; j++)
{
// Substring a[i...n]
if (aa[j] == ' ')
ra += "";
else
ra += aa[j];
// Substring b[i...n]
if (bb[j] == ' ')
rb += "";
else
rb += bb[j];
}
// Check is left part of a +
// right part of b or vice
// versa is a palindrome
if (isPalindrome(la + rb) ||
isPalindrome(lb + ra))
{
ok = true;
break;
}
}
// Print the result
if (ok)
cout << ("Yes");
// Otherwise
else
cout << ("No");
}
// Driver Code
int main()
{
string A = "bdea";
string B = "abbb";
int N = 4;
formPalindrome(A, B, N);
}
// This code is contributed by gauravrajput1
Java
// Java program for the above approach
import java.io.*;
import java.util.*;
class GFG {
// Function to check if a string
// is palindrome or not
static boolean isPalindrome(String str)
{
// Start and end of the string
int i = 0, j = str.length() - 1;
// Iterate the string until i > j
while (i < j) {
// If there is a mismatch
if (str.charAt(i)
!= str.charAt(j))
return false;
// Increment first pointer and
// decrement the other
i++;
j--;
}
// Given string is a palindrome
return true;
}
// Function two check if the strings can
// be combined to form a palindrome
static void formPalindrome(
String a, String b, int n)
{
// Initialize array of characters
char aa[] = new char[n + 2];
char bb[] = new char[n + 2];
Arrays.fill(aa, ' ');
Arrays.fill(bb, ' ');
// Stores character of string
// in the character array
for (int i = 1; i <= n; i++) {
aa[i] = a.charAt(i - 1);
bb[i] = b.charAt(i - 1);
}
boolean ok = false;
for (int i = 0; i <= n + 1; i++) {
// Find left and right parts
// of strings a and b
StringBuilder la
= new StringBuilder();
StringBuilder ra
= new StringBuilder();
StringBuilder lb
= new StringBuilder();
StringBuilder rb
= new StringBuilder();
for (int j = 1;
j <= i - 1; j++) {
// Substring a[j...i-1]
la.append((aa[j] == ' ')
? ""
: aa[j]);
// Substring b[j...i-1]
lb.append((bb[j] == ' ')
? ""
: bb[j]);
}
for (int j = i;
j <= n + 1; j++) {
// Substring a[i...n]
ra.append((aa[j] == ' ')
? ""
: aa[j]);
// Substring b[i...n]
rb.append((bb[j] == ' ')
? ""
: bb[j]);
}
// Check is left part of a +
// right part of b or vice
// versa is a palindrome
if (isPalindrome(la.toString()
+ rb.toString())
|| isPalindrome(lb.toString()
+ ra.toString())) {
ok = true;
break;
}
}
// Print the result
if (ok)
System.out.println("Yes");
// Otherwise
else
System.out.println("No");
}
// Driver Code
public static void main(String[] args)
{
String A = "bdea";
String B = "abbb";
int N = 4;
formPalindrome(A, B, N);
}
}
Python3
# Python3 program for the
# above approach
# Function to check if
# a string is palindrome
# or not
def isPalindrome(st):
# Start and end of
# the string
i = 0
j = len(st) - 1
# Iterate the string
# until i > j
while (i < j):
# If there is a mismatch
if (st[i] != st[j]):
return False
# Increment first pointer
# and decrement the other
i += 1
j -= 1
# Given string is a
# palindrome
return True
# Function two check if
# the strings can be
# combined to form a
# palindrome
def formPalindrome(a, b, n):
# Initialize array of
# characters
aa = [' '] * (n + 2)
bb = [' '] * (n + 2)
# Stores character of string
# in the character array
for i in range(1, n + 1):
aa[i] = a[i - 1]
bb[i] = b[i - 1]
ok = False
for i in range(n + 2):
# Find left and right parts
# of strings a and b
la = ""
ra = ""
lb = ""
rb = ""
for j in range(1, i):
# Substring a[j...i-1]
if (aa[j] == ' '):
la += ""
else:
la += aa[j]
# Substring b[j...i-1]
if (bb[j] == ' '):
lb += ""
else:
lb += bb[j]
for j in range(i, n + 2):
# Substring a[i...n]
if (aa[j] == ' '):
ra += ""
else:
ra += aa[j]
# Substring b[i...n]
if (bb[j] == ' '):
rb += ""
else:
rb += bb[j]
# Check is left part of a +
# right part of b or vice
# versa is a palindrome
if (isPalindrome(str(la) +
str(rb))
or isPalindrome(str(lb) +
str(ra))):
ok = True
break
# Print the result
if (ok):
print("Yes")
# Otherwise
else:
print("No")
# Driver Code
if __name__ == "__main__":
A = "bdea"
B = "abbb"
N = 4
formPalindrome(A, B, N)
# This code is contributed by Chitranayal
C#
// C# program for the
// above approach
using System;
using System.Text;
class GFG{
// Function to check if a string
// is palindrome or not
static bool isPalindrome(String str)
{
// Start and end of the string
int i = 0, j = str.Length - 1;
// Iterate the string
// until i > j
while (i < j)
{
// If there is a mismatch
if (str[i] != str[j])
return false;
// Increment first pointer
// and decrement the other
i++;
j--;
}
// Given string is
// a palindrome
return true;
}
// Function two check if the strings can
// be combined to form a palindrome
static void formPalindrome(String a,
String b, int n)
{
// Initialize array of
// characters
char []aa = new char[n + 2];
char []bb = new char[n + 2];
for(int i = 0; i < n + 2; i++)
{
aa[i] = ' ';
bb[i] = ' ';
}
// Stores character of string
// in the character array
for (int i = 1; i <= n; i++)
{
aa[i] = a[i-1];
bb[i] = b[i-1];
}
bool ok = false;
for (int i = 0;
i <= n + 1; i++)
{
// Find left and right parts
// of strings a and b
StringBuilder la =
new StringBuilder();
StringBuilder ra =
new StringBuilder();
StringBuilder lb =
new StringBuilder();
StringBuilder rb =
new StringBuilder();
for (int j = 1;
j <= i - 1; j++)
{
// Substring a[j...i-1]
la.Append((aa[j] == ' ') ?
' ' : aa[j]);
// Substring b[j...i-1]
lb.Append((bb[j] == ' ') ?
' ' : bb[j]);
}
for (int j = i;
j <= n + 1; j++)
{
// Substring a[i...n]
ra.Append((aa[j] == ' ') ?
' ' : aa[j]);
// Substring b[i...n]
rb.Append((bb[j] == ' ') ?
' ' : bb[j]);
}
// Check is left part of a +
// right part of b or vice
// versa is a palindrome
if (isPalindrome(la.ToString() +
rb.ToString()) ||
isPalindrome(lb.ToString() +
ra.ToString()))
{
ok = true;
break;
}
}
// Print the result
if (!ok)
Console.WriteLine("Yes");
// Otherwise
else
Console.WriteLine("No");
}
// Driver Code
public static void Main(String[] args)
{
String A = "bdea";
String B = "abbb";
int N = 4;
formPalindrome(A, B, N);
}
}
// This code is contributed by 29AjayKumar
JavaScript
<script>
// Javascript Program to implement
// the above approach
// Function to check if a string
// is palindrome or not
function isPalindrome(str)
{
// Start and end of the
// string
var i = 0, j = str.length - 1;
// Iterate the string
// until i > j
while (i < j)
{
// If there is a mismatch
if (str[i] != str[j])
return false;
// Increment first pointer
// and decrement the other
i++;
j--;
}
// Given string is a
// palindrome
return true;
}
// Function two check if
// the strings can be
// combined to form a palindrome
function formPalindrome( a, b, n)
{
// Initialize array of
// characters
var aa= new Array(n + 2);
var bb=new Array(n + 2);
for (var i = 0; i < n + 2; i++)
{
aa[i] = ' ';
bb[i] = ' ';
}
// Stores character of string
// in the character array
for (var i = 1; i <= n; i++)
{
aa[i] = a[i - 1];
bb[i] = b[i - 1];
}
var ok = Boolean(false);
for (var i = 0; i <= n + 1; i++)
{
// Find left and right parts
// of strings a and b
var la = "";
var ra = "";
var lb = "";
var rb = "";
for (var j = 1; j <= i - 1; j++)
{
// Substring a[j...i-1]
if (aa[j] == ' ')
la += "";
else
la += aa[j];
// Substring b[j...i-1]
if (bb[j] == ' ')
lb += "";
else
lb += bb[j];
}
for (var j = i; j <= n + 1; j++)
{
// Substring a[i...n]
if (aa[j] == ' ')
ra += "";
else
ra += aa[j];
// Substring b[i...n]
if (bb[j] == ' ')
rb += "";
else
rb += bb[j];
}
// Check is left part of a +
// right part of b or vice
// versa is a palindrome
if (isPalindrome(la + rb) || isPalindrome(lb + ra))
{
ok = true;
break;
}
}
// Print the result
if (ok)
document.write ("Yes");
// Otherwise
else
document.write ("No");
}
var A = "bdea";
var B = "abbb";
var N = 4;
formPalindrome(A, B, N);
// This code is contributed by SoumikMondal
</script>
Time Complexity: O(N2) where N is the lengths of the given strings.
Auxiliary Space: O(N)
Alternate Python Approach(Two pointers +Slicing):
This approach follows the following path:
- Define the function check
- Take two pointers i,j at 0, n-1 position respectively
- If the first character of a and second character of b does not match we break (since we are searching for the palindrome)
- If matches we simply increment the pointer
- We would concatenate the form a[i:j+1] of the first string and b[i:j+1] of the second string and check for the condition of palindrome
- If yes we return True
C++
// C++ program to implement
// the above approach
#include<bits/stdc++.h>
using namespace std;
string rev(string str)
{
int st = 0;
int ed = str.length() - 1;
string s = str;
while(st < ed)
{
swap(s[st],
s[ed]);
st++;
ed--;
}
return s;
}
bool check(string a,
string b, int n)
{
int i = 0;
int j = n - 1;
// iterate through the
// length if we could
// find a[i]==b[j] we could
// increment I and decrement j
while(i < n)
{
if(a[i] != b[j])
break;
// else we could just break
// the loop as its not a
// palindrome type sequence
i += 1;
j -= 1;
// we could concatenate the
// a's left part +b's right
// part in a variable a and
// a's right part+b's left
// in the variable b
string xa = a.substr(i, j + 1 - i);
string xb = b.substr(i, j + 1 - i);
// we would check for the
// palindrome condition if
// yes we print True else False
if((xa == rev(xa)) or
(xb == rev(xb)))
return true;
}
return false;
}
// Driver code
int main()
{
string a = "xbdef";
string b = "cabex";
if (check(a, b,
a.length()) == true or
check(b, a,
a.length()) == true)
cout << "True";
else
cout << "False";
}
// This code is contributed by Surendra_Gangwar
Java
// Java program to implement
// the above approach
import java.util.*;
import java.io.*;
class GFG{
public static String rev(String str)
{
int st = 0;
int ed = str.length() - 1;
char[] s = str.toCharArray();
while(st < ed)
{
char temp = s[st];
s[st] = s[ed];
s[ed] = temp;
st++;
ed--;
}
return (s.toString());
}
public static boolean check(String a,
String b, int n)
{
int i = 0;
int j = n - 1;
// Iterate through the
// length if we could
// find a[i]==b[j] we could
// increment I and decrement j
while(i < n)
{
if (a.charAt(i) != b.charAt(j))
break;
// Else we could just break
// the loop as its not a
// palindrome type sequence
i += 1;
j -= 1;
// We could concatenate the
// a's left part +b's right
// part in a variable a and
// a's right part+b's left
// in the variable b
String xa = a.substring(i, j + 1);
String xb = b.substring(i, j + 1);
// We would check for the
// palindrome condition if
// yes we print True else False
StringBuffer XA = new StringBuffer(xa);
XA.reverse();
StringBuffer XB = new StringBuffer(xb);
XB.reverse();
if (xa == XA.toString() ||
xb == XB.toString())
{
return true;
}
}
return false;
}
// Driver Code
public static void main(String[] args)
{
String a = "xbdef";
String b = "cabex";
if (check(a, b, a.length()) ||
check(b, a, a.length()))
System.out.println("True");
else
System.out.println("False");
}
}
// This code is contributed by divyesh072019
Python3
# Python3 program to implement
# the above approach
def check(a, b, n):
i, j = 0, n - 1
# iterate through the length if
# we could find a[i]==b[j] we could
# increment I and decrement j
while(i < n):
if(a[i] != b[j]):
# else we could just break
# the loop as its not a palindrome
# type sequence
break
i += 1
j -= 1
# we could concatenate the a's left part
# +b's right part in a variable a and a's
# right part+b's left in the variable b
xa = a[i:j+1]
xb = b[i:j+1]
# we would check for the palindrome condition
# if yes we print True else False
if(xa == xa[::-1] or xb == xb[::-1]):
return True
a = "xbdef"
b = "cabex"
if check(a, b, len(a)) == True or check(b, a, len(a)) == True:
print(True)
else:
print(False)
# CODE CONTRIBUTED BY SAIKUMAR KUDIKALA
C#
// C# program to implement
// the above approach
using System;
class GFG {
static string rev(string str)
{
int st = 0;
int ed = str.Length - 1;
char[] s = str.ToCharArray();
while(st < ed)
{
char temp = s[st];
s[st] = s[ed];
s[ed] = temp;
st++;
ed--;
}
return new string(s);
}
static bool check(string a,
string b, int n)
{
int i = 0;
int j = n - 1;
// iterate through the
// length if we could
// find a[i]==b[j] we could
// increment I and decrement j
while(i < n)
{
if(a[i] != b[j])
break;
// else we could just break
// the loop as its not a
// palindrome type sequence
i += 1;
j -= 1;
// we could concatenate the
// a's left part +b's right
// part in a variable a and
// a's right part+b's left
// in the variable b
string xa = a.Substring(i, j + 1 - i);
string xb = b.Substring(i, j + 1 - i);
// we would check for the
// palindrome condition if
// yes we print True else False
char[] XA = xa.ToCharArray();
Array.Reverse(XA);
char[] XB = xb.ToCharArray();
Array.Reverse(XB);
if(string.Compare(xa, new string(XA)) == 0 ||
string.Compare(xb, new string(XB)) == 0)
return true;
}
return false;
}
// Driver code
static void Main()
{
string a = "xbdef";
string b = "cabex";
if (check(a, b, a.Length) || check(b, a, a.Length))
Console.WriteLine("True");
else
Console.WriteLine("False");
}
}
// This code is contributed by divyeshrabadiya07
JavaScript
<script>
// JavaScript program to implement
// the above approach
function rev(str) {
var st = 0;
var ed = str.length - 1;
var s = str.split("");
while (st < ed) {
var temp = s[st];
s[st] = s[ed];
s[ed] = temp;
st++;
ed--;
}
return s.join();
}
function check(a, b, n) {
var i = 0;
var j = n - 1;
// iterate through the
// length if we could
// find a[i]==b[j] we could
// increment I and decrement j
while (i < n) {
if (a[i] !== b[j]) break;
// else we could just break
// the loop as its not a
// palindrome type sequence
i += 1;
j -= 1;
// we could concatenate the
// a's left part +b's right
// part in a variable a and
// a's right part+b's left
// in the variable b
var xa = a.substring(i, j + 1 - i);
var xb = b.substring(i, j + 1 - i);
// we would check for the
// palindrome condition if
// yes we print True else False
var XA = xa.split("");
XA.sort().reverse();
var XB = xb.split("");
XB.sort().reverse();
if (xa === XA.join("") || xb === XB.join("")) return true;
}
return false;
}
// Driver code
var a = "xbdef";
var b = "cabex";
if (check(a, b, a.length) || check(b, a, a.length))
document.write("True");
else document.write("False");
</script>
Time Complexity : O( | a |*| a+b |) ,where | a | is size of string a and | a+b | is size of string (a+b)
Space Complexity : O( | a+b |)
Another Approach:
The two-pointer technique is used to solve this problem. Traverse the string over its length [0, n-1]. Check if the concatenation of the substrings a [0, i-1] and b [i, n-1] or b [0, i-1] and a [i, n-1], (where i is any index) is a palindromic string or not. If it is a palindromic string, return true else return false.
Below is the implementation of this approach:
C++
// C++ code to implement the above approach
#include <bits/stdc++.h>
using namespace std;
/*function to check if a string is palindrome or not*/
bool isPalindrome(string s){
int i=0,j=s.size()-1;
while(i<=j){
if(s[i]!=s[j]){
return false;
}
i++;
j--;
}
return true;
}
bool checkStrings(string &a, string &b, int n){
for(int i=0;i<n;i++){
/*check whether the concatenation of substrings is palindrome or not*/
if((isPalindrome(a.substr(0,i)+b.substr(i))) || (isPalindrome(b.substr(0,i)+a.substr(i))) ){
return true;
}
}
return false;
}
int main() {
string a = "xyzdef";
string b = "rstzyx";
int n = 6;
/*if the concatenation of substring is palindrome, print true else print false*/
if(checkStrings(a,b,n))
cout<<"true";
else
cout<<"false";
return 0;
}
// This code is contributed by 525tamannacse11
Java
import java.util.*;
public class Main
{
/*function to check if a string is palindrome or not*/
public static boolean isPalindrome(String s)
{
int i = 0, j = s.length() - 1;
while (i <= j) {
if (s.charAt(i) != s.charAt(j)) {
return false;
}
i++;
j--;
}
return true;
}
public static boolean checkStrings(String a, String b,
int n)
{
for (int i = 0; i < n; i++) {
/*check whether the concatenation of substrings
* is palindrome or not*/
if ((isPalindrome(a.substring(0, i)
+ b.substring(i)))
|| (isPalindrome(b.substring(0, i)
+ a.substring(i)))) {
return true;
}
}
return false;
}
public static void main(String[] args)
{
String a = "xyzdef";
String b = "rstzyx";
int n = 6;
/*if the concatenation of substring is palindrome,
* print true else print false*/
if (checkStrings(a, b, n)) {
System.out.println("true");
}
else {
System.out.println("false");
}
}
}
C#
using System;
namespace PalindromeCheck {
class Program {
static bool IsPalindrome(string s)
{
int i = 0, j = s.Length - 1;
while (i <= j) {
if (s[i] != s[j]) {
return false;
}
i++;
j--;
}
return true;
}
static bool CheckStrings(ref string a, ref string b,
int n)
{
for (int i = 0; i < n; i++) {
/*check whether the concatenation of substrings
* is palindrome or not*/
if ((IsPalindrome(a.Substring(0, i)
+ b.Substring(i)))
|| (IsPalindrome(b.Substring(0, i)
+ a.Substring(i)))) {
return true;
}
}
return false;
}
static void Main(string[] args)
{
string a = "xyzdef";
string b = "rstzyx";
int n = 6;
/*if the concatenation of substring is palindrome,
* print true else print false*/
if (CheckStrings(ref a, ref b, n))
Console.WriteLine("true");
else
Console.WriteLine("false");
Console.ReadKey();
}
}
}
// This code is contributed by user_dtewbxkn77n
Python3
# function to check if a string is palindrome or not
def isPalindrome(s):
i = 0
j = len(s) - 1
while i <= j:
if s[i] != s[j]:
return False
i += 1
j -= 1
return True
def checkStrings(a, b, n):
for i in range(n):
# check whether the concatenation of substrings is palindrome or not
if (isPalindrome(a[:i] + b[i:])) or (isPalindrome(b[:i] + a[i:])):
return True
return False
a = "xyzdef"
b = "rstzyx"
n = 6
# if the concatenation of substring is palindrome, print true else print false
if checkStrings(a, b, n):
print("true")
else:
print("false")
JavaScript
/*function to check if a string is palindrome or not*/
function isPalindrome(s) {
let i = 0,
j = s.length - 1;
while (i <= j) {
if (s[i] != s[j]) {
return false;
}
i++;
j--;
}
return true;
}
function checkStrings(a, b, n) {
for (let i = 0; i < n; i++) {
/*check whether the concatenation of substrings is palindrome or not*/
if ((isPalindrome(a.substr(0, i) + b.substr(i))) || (isPalindrome(b.substr(0, i) + a.substr(i)))) {
return true;
}
}
return false;
}
let a = "xyzdef";
let b = "rstzyx";
let n = 6;
/*if the concatenation of substring is palindrome, print true else print false*/
if (checkStrings(a, b, n))
console.log("true");
else
console.log("false");
Time Complexity: O(n)
Space Complexity: O(1)
Similar Reads
Check if concatenation of splitted substrings of two given strings forms a palindrome or not
Given two strings a and b of the same length, the task is to check if splitting both the strings and concatenating their opposite substrings, i.e. concatenating the left substring of a with right substring of b or concatenating the left substring of b with right substring of a, forms a palindrome or
8 min read
Count of palindromes that can be obtained by concatenating equal length prefix and substrings
Prerequisites: Z-algorithm Given a string S, the task is to find the maximum number of palindromes that can be formed after performing the given steps: Choose a non-empty prefix P and a non-empty substring T of equal length.Reverse either P or T and concatenate them. Note: P and T can be overlapping
6 min read
Longest palindromic string possible by concatenating strings from a given array
Given an array of strings S[] consisting of N distinct strings of length M. The task is to generate the longest possible palindromic string by concatenating some strings from the given array. Examples: Input: N = 4, M = 3, S[] = {"omg", "bbb", "ffd", "gmo"}Output: omgbbbgmoExplanation: Strings "omg"
8 min read
Rearrange characters of a string to make it a concatenation of palindromic substrings
Given a string S consisting of lowercase alphabets, the task is to check whether the given string can be rearranged such that the string can be split into non-overlapping palindromic substrings of at least length 2. If found to be true, then print "Yes". Otherwise, print "No". Examples: Input: S = "
6 min read
Longest palindromic string formed by concatenation of prefix and suffix of a string
Given string str, the task is to find the longest palindromic substring formed by the concatenation of the prefix and suffix of the given string str. Examples: Input: str = "rombobinnimor" Output: rominnimor Explanation: The concatenation of string "rombob"(prefix) and "mor"(suffix) is "rombobmor" w
10 min read
Check if a string contains a palindromic sub-string of even length
S is string containing only lowercase English alphabets. We need to find if there exists at least one palindromic sub-string whose length is even. Examples: Input : aassssOutput : YESInput : gfgOutput : NOApproach: Approach to solve this problem is to check all even-length substrings of the given st
8 min read
Check if K palindromic strings can be formed from a given string
Given a string S of size N and an integer K, the task is to find whether the characters of the string can be arranged to make K palindromic strings simultaneously. Examples: Input: S = "annabelle", K = 2 Output: Yes Explanation: All characters of string S can be distributed into "elble" and "anna" w
7 min read
Minimum characters to be replaced to make a string concatenation of a K-length palindromic string
Given a string S of size N and a positive integer K ( where N % K = 0), the task is to find the minimum number of characters required to be replaced such that the string is K-periodic and the K-length periodic string must be a palindrome. Examples: Input: S = "abaaba", K = 3Output: 0Explanation: The
10 min read
Maximum number of times a given string needs to be concatenated to form a substring of another string
Given two strings S1 and S2 of length N and M respectively, the task is to find the maximum value of times the string S2 needs to be concatenated, such that it is a substring of the string S1. Examples: Input: S1 = "ababc", S2 = "ab"Output: 2Explanation: After concatenating S2 exactly twice, the str
12 min read
Find if a given string can be represented from a substring by iterating the substring ânâ times
Given a string 'str', check if it can be constructed by taking a substring of it and appending multiple copies of the substring together. Examples: Input: str = "abcabcabc" Output: true The given string is 3 times repetition of "abc" Input: str = "abadabad" Output: true The given string is 2 times r
15+ min read