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
DSA Tutorial - Learn Data Structures and Algorithms DSA (Data Structures and Algorithms) is the study of organizing data efficiently using data structures like arrays, stacks, and trees, paired with step-by-step procedures (or algorithms) to solve problems effectively. Data structures manage how data is stored and accessed, while algorithms focus on
7 min read
Quick Sort QuickSort is a sorting algorithm based on the Divide and Conquer that picks an element as a pivot and partitions the given array around the picked pivot by placing the pivot in its correct position in the sorted array. It works on the principle of divide and conquer, breaking down the problem into s
12 min read
Merge Sort - Data Structure and Algorithms Tutorials Merge sort is a popular sorting algorithm known for its efficiency and stability. It follows the divide-and-conquer approach. It works by recursively dividing the input array into two halves, recursively sorting the two halves and finally merging them back together to obtain the sorted array. Merge
14 min read
Bubble Sort Algorithm Bubble Sort is the simplest sorting algorithm that works by repeatedly swapping the adjacent elements if they are in the wrong order. This algorithm is not suitable for large data sets as its average and worst-case time complexity are quite high.We sort the array using multiple passes. After the fir
8 min read
Data Structures Tutorial Data structures are the fundamental building blocks of computer programming. They define how data is organized, stored, and manipulated within a program. Understanding data structures is very important for developing efficient and effective algorithms. What is Data Structure?A data structure is a st
2 min read
Breadth First Search or BFS for a Graph Given a undirected graph represented by an adjacency list adj, where each adj[i] represents the list of vertices connected to vertex i. Perform a Breadth First Search (BFS) traversal starting from vertex 0, visiting vertices from left to right according to the adjacency list, and return a list conta
15+ min read
Binary Search Algorithm - Iterative and Recursive Implementation Binary Search Algorithm is a searching algorithm used in a sorted array by repeatedly dividing the search interval in half. The idea of binary search is to use the information that the array is sorted and reduce the time complexity to O(log N). Binary Search AlgorithmConditions to apply Binary Searc
15 min read
Insertion Sort Algorithm Insertion sort is a simple sorting algorithm that works by iteratively inserting each element of an unsorted list into its correct position in a sorted portion of the list. It is like sorting playing cards in your hands. You split the cards into two groups: the sorted cards and the unsorted cards. T
9 min read
Dijkstra's Algorithm to find Shortest Paths from a Source to all Given a weighted undirected graph represented as an edge list and a source vertex src, find the shortest path distances from the source vertex to all other vertices in the graph. The graph contains V vertices, numbered from 0 to V - 1.Note: The given graph does not contain any negative edge. Example
12 min read
Selection Sort Selection Sort is a comparison-based sorting algorithm. It sorts an array by repeatedly selecting the smallest (or largest) element from the unsorted portion and swapping it with the first unsorted element. This process continues until the entire array is sorted.First we find the smallest element an
8 min read