Merge two strings in chunks of given size
Last Updated :
17 Nov, 2022
Given two strings ‘a’ and ‘b’ and a number k, our aim is to merge the strings into a string s such that it contains groups of k characters from the strings alternately in the final string.
Examples:
Input: a = "durability",
b = "essence
k = 3
Output: duressabienclitey
Input: a = "determination"
b = "stance"
k = 3
Output: detstaermnceination
In the second example we chose groups of three characters from determination and stance alternately to make the string. But when the string stance was completely used then we added the remaining string of determination as it is.
The approach of this problem is to alternately add groups of characters of both the strings until one of the string is finished. Then we simply have to add the remaining portion of the leftover string to the answer as it is.
Implementation:
C++
#include <bits/stdc++.h>
using namespace std;
void solve(string a, string b, int k)
{
string s = "" ;
int la = a.length();
int lb = b.length();
int l = la + lb;
int indexa = 0, indexb = 0;
while (l > 0) {
int pa = 0, pb = 0;
if (la - indexa >= k) {
s = s + a.substr(indexa, k);
indexa = indexa + k;
pa = k;
}
else if (la - indexa < k && la - indexa > 0) {
s = s + a.substr(indexa, la - indexa);
pa = la - indexa;
indexa = la;
}
else if (indexa >= la)
pa = 0;
if (lb - indexb >= k) {
s = s + b.substr(indexb, k);
pb = k;
indexb = indexb + k;
}
else if (lb - indexb < k && lb - indexb > 0) {
s = s + b.substr(indexb, lb - indexb);
pb = lb - indexb;
indexb = lb;
}
else if (indexb >= lb)
pb = 0;
l = l - pa - pb;
}
cout << s;
}
int main()
{
string a = "determination" , b = "stance" ;
int k = 3;
solve(a, b, k);
return 0;
}
|
Java
import java.io.*;
class msc {
public static void solve(String a,
String b, int k)
{
String s = "" ;
int la = a.length();
int lb = b.length();
int l = la + lb;
int indexa = 0 , indexb = 0 ;
while (l > 0 ) {
int pa = 0 , pb = 0 ;
if (la - indexa >= k) {
s = s + a.substring(indexa, indexa + k);
indexa = indexa + k;
pa = k;
}
else if (la - indexa < k && la - indexa > 0 ) {
s = s + a.substring(indexa, la);
pa = la - indexa;
indexa = la;
}
else if (indexa >= la)
pa = 0 ;
if (lb - indexb >= k) {
s = s + b.substring(indexb, indexb + k);
pb = k;
indexb = indexb + k;
}
else if (lb - indexb < k && lb - indexb > 0 ) {
s = s + b.substring(indexb, lb);
pb = lb - indexb;
indexb = lb;
}
else if (indexb >= lb)
pb = 0 ;
l = l - pa - pb;
}
System.out.println(s);
}
public static void main(String args[])
throws IOException
{
String a = "determination" , b = "stance" ;
int k = 3 ;
solve(a, b, k);
}
}
|
Python3
def solve(a, b, k):
s = ""
la = len (a)
lb = len (b)
l = la + lb
indexa = indexb = 0
while l:
pa = pb = 0
if la - indexa > = k:
s = s + a[indexa : indexa + k]
indexa = indexa + k
pa = k
elif la - indexa < k and la - indexa:
s = s + a[indexa : la]
pa = la - indexa
indexa = la
elif indexa > = la:
pa = 0
if lb - indexb > = k:
s = s + b[indexb : indexb + k]
pb = k
indexb = indexb + k
elif lb - indexb < k and lb - indexb:
s = s + b[indexb : lb]
pb = lb - indexb
indexb = lb
elif indexb > = lb:
pb = 0
l = l - pa - pb
print (s)
a = "determination" ; b = "stance"
k = 3
solve(a, b, k)
|
C#
using System;
class GFG
{
static void solve( string a,
string b,
int k)
{
string s = "" ;
int la = a.Length;
int lb = b.Length;
int l = la + lb;
int indexa = 0, indexb = 0;
while (l > 0)
{
int pa = 0, pb = 0;
if (la - indexa >= k)
{
s = s + a.Substring(indexa, k);
indexa = indexa + k;
pa = k;
}
else if (la - indexa < k &&
la - indexa > 0)
{
s = s + a.Substring(indexa,
la - indexa);
pa = la - indexa;
indexa = la;
}
else if (indexa >= la)
pa = 0;
if (lb - indexb >= k)
{
s = s + b.Substring(indexb, k);
pb = k;
indexb = indexb + k;
}
else if (lb - indexb < k &&
lb - indexb > 0)
{
s = s + b.Substring(indexb,
lb - indexb);
pb = lb - indexb;
indexb = lb;
}
else if (indexb >= lb)
pb = 0;
l = l - pa - pb;
}
Console.Write(s);
}
static void Main()
{
string a = "determination" ,
b = "stance" ;
int k = 3;
solve(a, b, k);
}
}
|
Javascript
function solve(a, b, k)
{
let s = ""
let la = a.length
let lb = b.length
let l = la + lb
let indexa = 0
let indexb = 0
while (l > 0) {
let pa = 0
let pb = 0;
if (la - indexa >= k) {
s = s + a.substr(indexa, k)
indexa = indexa + k
pa = k
}
else if (la - indexa < k && la - indexa > 0) {
s = s + a.substr(indexa, la - indexa)
pa = la - indexa
indexa = la
}
else if (indexa >= la) {
pa = 0
}
if (lb - indexb >= k) {
s = s + b.substr(indexb, k)
pb = k
indexb = indexb + k
}
else if (lb - indexb < k && lb - indexb > 0) {
s = s + b.substr(indexb, lb - indexb)
pb = lb - indexb
indexb = lb
}
else if (indexb >= lb)
pb = 0
l = l - pa - pb
}
console.log(s)
}
let a = "determination"
let b = "stance"
let k = 3
solve(a, b, k)
|
Output
detstaermnceination
Time Complexity: O(|a|+|b|).
Auxiliary Space: O(|a|+|b|), where |a| and |b| are the length of string a and b respectively.
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...